SpringCloud消費方調用服務方失敗
今天在學習Spring cloud時,實現RestTemplate遠程調用時,出現了 java.net.UnknownHostException: service-member錯誤。
問題排查
1、首先看引入的Spring-cloud包是否正確。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
發現所使用的依賴並沒有問題。
2、看bean設置,RestTemplate
一開始是在service層使用Autowired 自動注入,但提示無法實現自動注入,網上查了下,是因爲版本問題導致。
Spring Boot<=1.3 無需定義,Spring Boot自動爲您定義了一個。
Spring Boot >= 1.4 Spring Boot不再自動定義一個RestTemplate,而是定義了一個RestTemplateBuilder允許您更好地控制所RestTemplate創建的對象
解決方法如下:
@Configuration
public class ApplicationConfig {
//或者在Application啓動層加入該段代碼
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
有了以上這段再使用@Autowired時自動注入成功。
啓動後,發現了報錯也就是java.net.UnknownHostException,提示連接失敗。
又返回看了下代碼,發現沒有加上負載均衡的註解,加上是:
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
此時再去請求,就可以正確調用了。當然了,使用feign的話,就不需要配置RestTemplate了。