1. 程式人生 > >第五篇:RestTemplate訪問服務叢集

第五篇:RestTemplate訪問服務叢集

在生產環境,為了防止單節點故障,服務應用往往要搭建服務叢集,而咱們上一講使用的遠端呼叫方式是沒法對叢集進行訪問的,只能對某個應用節點進行訪問。

程式碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

@RestController

public class ConsumerController {

private RestTemplate restTemplate = new RestTemplate();

@RequestMapping

("/findOne")

public User findOne(){

User user = restTemplate.getForObject("http://localhost:8181/user/1", User.class);

return user;

}

}

這種遠端呼叫方式缺點有兩方面:

1:無法在服務叢集中均衡訪問,因為ip和埠寫死了

2:如果服務遷移到其他伺服器,比如從開發環境遷移到生產環境,程式碼要修改,因為ip和埠寫死了

Resttemplate訪問服務叢集

步驟一:在restTemplate模板物件上加@LoadBalanced註解

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@SpringBootApplication

@EnableEurekaClient

public class ConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(ConsumerApplication.class, args);

}

@Bean

@LoadBalanced

public RestTemplate getRestTemplate(){

return new RestTemplate();

}

}

步驟二:在需要遠端呼叫的地方使用@Autowired註解注入restTemplate模板物件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@RestController

public class ConsumerController {

@Autowired

private RestTemplate restTemplate ;

@RequestMapping("/findOne")

public User findOne(){

User user = restTemplate.getForObject("http://SPRING-CLOUD-SERVICE-PROVIDER/user/1", User.class);

return user;

}

}

上面程式碼在進行遠端呼叫的時候不是寫的ip和埠而是應用名,一個服務叢集他們的應用名就只有一個。通過訪問應用名,就可以在叢集中均衡訪問。

完成上面兩個步驟就可以在服務叢集中均衡訪問服務節點,為什麼加上@LoadBalanced註解,就能均衡訪問叢集呢?

這裡面的功勞歸根ribbon元件,當我們應用依賴了eureka-client的時候,eureka-client依賴了ribbon,雖然看是ribbon沒有存在感,但是ribbon默默的發揮著自己的負載均衡能力。

image.png