接著前面2篇文章
下面繼續創建一個微服務項目,並通過RestTemplate方式進行2個微服務項目之間調用。
1、在項目父目錄上右鍵選擇New->Module,如下圖所示:
2、在左側選擇Spring Initializr,然後點擊Next,如下圖所示:
3、輸入Group和Artifact,然後點擊Next,如下圖所示:
4、在左側Dependencies中選擇Cloud Discovery,右側選擇Eureka Discovery,然後點擊Next,如下圖所示:
5、輸入Module name等信息後,然後點擊Finish,如下圖所示:
6、重命名resources目錄下的application.properties後綴名為yml,如下圖所示:
7、輸入以下內容
server: port: 8082spring: application: name: client-02eureka: client: service-url: defaultZone: http://localhost:8080/eureka
如下圖所示:
8、創建一個Controller類,如下圖所示:
9、Controller類的代碼如下
package com.baijiahao.eurekaclient2.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/client2")public class HomeController { @GetMapping("/showmsg") public String ShowMsg(){ return "我是微服務client2"; }}
如下圖所示:
10、在pom.xml中添加dependency配置信息
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>RELEASE</version> <scope>compile</scope></dependency>
如下圖所示:
11、在IDEA右上角,先啟動Eureka,然後啟動微服務1,然後再啟動微服務2,如下圖所示:
12、刷新Eureka服務中心,此時可以看到有2個微服務註冊到服務中心了,如下圖所示:
13、我們返回到微服務1的Controller類中修改方法,核心代碼如下:
/*第一種寫法:直接使用RestTemplate,URL地址固定,需要事先知道對方微服務的IP位址,如果對方的微服務有多個IP位址的話(分布式),則局限性較大 */RestTemplate template = new RestTemplate();String retMsg = template.getForObject("http://localhost:8082/client2/showmsg",String.class);return retMsg;
如下圖所示:
@Autowiredprivate LoadBalancerClient loadBalancerClient;
/*第二種寫法:通過LoadBalancerClient類獲取到註冊到Eureka服務中心的應用程式名稱,然後再使用RestTemplate */RestTemplate template = new RestTemplate();ServiceInstance serviceInstance = loadBalancerClient.choose("client-02");/String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()+"/client2/showmsg");String retMsg = template.getForObject(url,String.class);return retMsg;
創建RestTemplateConfig類,寫法更簡單,直接使用註冊到Eureka註冊中心的微服務應用名稱來作為IP位址和埠號
/*第三種寫法:利用@LoadBalanced,可在restTemplate裡使用應用的名稱 */
String retMsg = restTemplate.getForObject("http://client-02/client2/showmsg",String.class);return retMsg;
14、此時無論我們使用以上三個方法中的任意一個方法,來訪問微服務1,頁面將顯示微服務2中的方法的返回值,如下圖所示: