Nacos无法通过服务名调用问题记录(java.net.UnknowHostException:xxxx)

314 阅读1分钟
环境及版本:
  • JDK:17
  • springcluodalibaba:2022.0.0.0
  • Nacos:2.2.3

想着JDK21出来了,就试试JDK17为之后做准备,然后就搭了一个阿里的springcloud最新的稳定版本, 一个生产者,一个消费者

结构如下

image.png

问题

在consumer中通过服务名调用producer提供的服务出现了如下服务找不到的问题

image.png

排查

1.第一步发现自己忘记加@LoadBalanced注解,导致无法做负载均衡,然后加上,无效

2.第二步发现将服务名修改成ip+端口调用,成功

说明LoadBalanced注解没有作用,开始debugger 从RestTemplate下路往下到了createRequest方法, 当RestTemplate发起一个请求, 请求就会被LoadBalancerInterceptor拦截, 从拦截方法中得知,实际是由LoadBalancerClient发起的请求.Load debugger发现没有被拦截,准确的说相关LoadBalancer的一切都没有被加载 开始在LoadBalancerAutoConfiguration这个配置中打断点,重启服务,发现LoadBalancerAutoConfiguration没有被加载,所以相关的拦截器,请求就不存在了

image.png

开始解决问题: 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>

为什么旧版本没有加载配置这个问题等后面有时间再排查把