Spring cloud loadbalancer是spring官方发布的客户端负载均衡组件,而Netflix的 Ribbon已进入维护阶段,从最新的spring cloud2020版本中移除掉了,最近升级之后Nacos注册中心无法正常运行了,提醒我是不是忘了引入Spring cloud loadbalancer,~^_^~!索性就升级了吧!
1. 引入Spring cloud loadbalancer,配置禁用ribbon,启动正常,功能正不正常呢?往下看
<!-- 升级spring cloud之后,Nacos消费者服务依赖该组件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
spring:
cloud:
# 使用spring loadbalancer,弃用ribbon
loadbalancer:
ribbon:
enabled: false
2. 正常的业务逻辑是访问gateway网关,转发到delivery服务,delivery服务完成业务逻辑需要调用order服务,跑一下试试!!
异常了,看日志提示RibbonLoadBalancerClient未定义??明明已经禁用了为啥还是会去找它来卖命?打断点各种调试,feign没问题、loadbalancer也引入了,但每次都要去找ribbon,那估计是nacos的问题咯!
3. 去Nacos官方一看果然,有解决方案,nacos也要禁用ribbon:
https://github.com/alibaba/spring-cloud-alibaba/issues/1620
好吧,试试:
# 使用spring loadbalancer,弃用ribbon
ribbon:
nacos:
enabled: false
还是不生效,最后一扣脑壳,可能nacos自动配置哪里出了问题,老是要去找ribbon,干脆把ribbon给exclude了。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- 使用spring loadbalancer,弃用ribbon -->
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
哈哈!欧了!!再回头仔细一看nacos官方方案,有讲一句排除依赖,这也太不起眼太笼统了嘛!