可能很多人為了服務能同時支持feign和dubbo的調用會選擇使用spring cloud alibaba這個框架,最后發現了不少問題,比如重啟provider的時候,consumer經常報No provider的異常,也查找了很多解決方式,嘗試着升級版本等,最后可能都無濟於事。一開始以為是dubbo的問題,最后了解到spring cloud alibaba目前還不太適合於生產環境,下面講下如何以最便捷的方式解決這個問題。
1.注冊中心的改造
注冊中心這塊如果你同時用到dubbo和feign的話,要把注冊中心改成nacos,這樣可以同時支持兩種方式。以下的配置將基於nacos,nacos注冊中心引入spring cloud alibaba提供的jar
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.把dubbo包換掉
不要使用spring cloud alibaba提供的dubbo包
將
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
換成
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
3.修改配置
#可以兩種方式同時使用
#1.使用feign方式的時候需要配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#2.使用dubbo方式
dubbo.consumer.check = false
dubbo.consumer.timeout = 3000
dubbo.consumer.retries = 0
dubbo.protocol.name = dubbo
dubbo.protocol.port = -1
dubbo.registry.address=nacos://127.0.0.1:8848
4.目前我使用的相關版本信息
spring-boot:2.1.5.RELEASE
spring-cloud-dependencies:Greenwich.SR6
dubbo-spring-boot-starter:2.7.3
spring-cloud-alibaba-dependencies:2.1.4.RELEASE