(十一) 跟我學習SpringCloud-使用Eureka編寫服務消費者

本節主要講解如何使用 Eureka 編寫服務消費者。

1)直接調用接口

創建服務消費者,消費我們剛剛編寫的 user/hello 接口,同樣需要先創建一個 Maven 項目 eureka-client-article-service,然後添加依賴,依賴和服務提供者的一樣,這裏就不貼代碼了。

創建啓動類 App,啓動代碼與前面所講也是一樣的。唯一不同的就是 application.properties 文件中的配置信息:

spring.application.name=eureka-client-article-service
server.port=8082

RestTemplate 是 Spring 提供的用於訪問 Rest 服務的客戶端,RestTemplate 提供了多種便捷訪問遠程 Http 服務的方法,能夠大大提高客戶端的編寫效率。我們通過配置 RestTemplate 來調用接口,代碼如下所示。

@Configuration
public class BeanConfiguration {
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

創建接口,在接口中調用 user/hello 接口,代碼如下所示。

@RestController
public class ArticleController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/article /callHello")
    public String callHello() {
        return restTemplate.getForObject("http://localhost:8081/user/hello", String.class);
    }
}

執行 App 啓動消費者服務,訪問 /article/callHello 接口來看看有沒有返回 Hello 字符串,如果返回了就證明調用成功。訪問地址爲 http://localhost:8082/article/callHello (http://localhost%EF%BC%9A8082/article/callHello)。

2)通過 Eureka 來消費接口

上面提到的方法是直接通過服務接口的地址來調用的,和我們之前的做法一樣,完全沒有用到 Eureka 帶給我們的便利。既然用了註冊中心,那麼客戶端調用的時候肯定是不需要關心有多少個服務提供接口,下面我們來改造之前的調用代碼。

首先改造 RestTemplate 的配置,添加一個 @LoadBalanced 註解,這個註解會自動構造 LoadBalancerClient 接口的實現類並註冊到 Spring 容器中,代碼如下所示。

@Configuration
public class BeanConfiguration {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

接下來就是改造調用代碼,我們不再直接寫固定地址,而是寫成服務的名稱,這個名稱就是我們註冊到 Eureka 中的名稱,是屬性文件中的 spring.application.name,相關代碼如下所示。

@GetMapping("/article/callHello2")
public String callHello2() {
    return restTemplate.getForObject("http://eureka-client-user-service/user/hello", String.class);
}

推薦分佈式架構源碼

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