环境及版本:
- JDK:17
- springcluodalibaba:2022.0.0.0
- Nacos:2.2.3
想着JDK21出来了,就试试JDK17为之后做准备,然后就搭了一个阿里的springcloud最新的稳定版本, 一个生产者,一个消费者
结构如下
问题
在consumer中通过服务名调用producer提供的服务出现了如下服务找不到的问题
排查
1.第一步发现自己忘记加@LoadBalanced注解,导致无法做负载均衡,然后加上,无效
2.第二步发现将服务名修改成ip+端口调用,成功
说明LoadBalanced注解没有作用,开始debugger 从RestTemplate下路往下到了createRequest方法, 当RestTemplate发起一个请求, 请求就会被LoadBalancerInterceptor拦截, 从拦截方法中得知,实际是由LoadBalancerClient发起的请求.Load debugger发现没有被拦截,准确的说相关LoadBalancer的一切都没有被加载 开始在LoadBalancerAutoConfiguration这个配置中打断点,重启服务,发现LoadBalancerAutoConfiguration没有被加载,所以相关的拦截器,请求就不存在了
开始解决问题: 1.添加了以下依赖,无效
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.1.1</version>
开始翻以前的老项目,发现正常运行的,但是版本不一致,开始升级版本,一直到4.0.0这个版本才解决这个问题。
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>4.0.0</version>
为什么旧版本没有加载配置这个问题等后面有时间再排查把