场景

spring中使用restTemplate远程访问的时候报这个错:
java.lang.IllegalStateException: No instances available for localhost

解决方案

不只一种解决方案,看哪种更适合自己。

ip地址写为服务名

这个报错一般会出现在使用了负载均衡,如:

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}

当restTemplate调用ulr的时候,不要直接写域名
​​​ http://127.0.0.1:8080/user​​​ 而是要写服务名
http://yonghu-server/user

重新设置restTemplate

那么如果我不想用负载均衡呢?
也是可以的。
配置代码如下:

@Bean
@LoadBalanced
@Primary
public RestTemplate restTemplate(){
return new RestTemplate();
}


@Bean
public RestTemplate restTemplateCustom(){
return new RestTemplate();
}

引入代码如下:

@Autowired(required = false) // 这个可以解决idea报错
@Qualifier("restTemplateCustom") // 表示根据名称来找bean
private RestTemplate restTemplateCustom;

然后url使用ip,发现可以了。