SpringCloud消費者調用服務方失敗 java.net.UnknownHostException

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了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章