可能很多人为了服务能同时支持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