问题
[Request processing failed: org.springframework.web.client.ResourceAccessException: I/O error on GET request for “http://nacos-provider/xxx”: nacos-provider] with root cause
java.net.UnknownHostException: nacos-provider


问题分析
Spring Cloud Alibaba 服务消费者调用服务提供者,解析url失败。且使用RestTemplate 远程调用时,加了@LoadBalanced注解还是报错。
//启动类
@SpringBootApplication
@EnableDiscoveryClient
public class CloudAlibabaConsumerNacos8083Application {
public static void main(String[] args) {
SpringApplication.run(CloudAlibabaConsumerNacos8083Application.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
//控制层
@RestController
public class DemoController {
@Resource
private RestTemplate restTemplate;
/**
* 消费者去访问具体服务,这种写法可以实现
* 配置文件和代码的分离
*/
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "/consumer/nacos")
public String getDiscovery(){
System.err.println(serverURL);
return restTemplate.getForObject(serverURL + "/xxx",String.class);
}
}
问题解决
1.服务发现失效
Ribbon无法通过Nacos解析服务名nacos-provider,表明服务注册或发现环节异常
2.负载均衡缺失
- Spring Cloud Alibaba 2023.x默认移除了Ribbon,需显式启用Spring Cloud LoadBalancer
- 本人使用的是Spring Cloud Alibaba 2023.0.1.0,springboot版本是3.2.5,所以需要重新导入Spring Cloud LoadBalancer依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>4.2.1</version>
</dependency>
引入依赖重启后正常访问:

总结
一般这个异常UnknownHostException百分之九十九的就是springboot和spring cloud alibaba版本兼容问题,考虑所用的版本是否包含Ribbon,检查版本兼容,多尝试即可。

被折叠的 条评论
为什么被折叠?



