1. 程式人生 > 其它 >SpringCloud Hoxton版微服務-RestTempalte + @LoadBlanced 實現負載均衡

SpringCloud Hoxton版微服務-RestTempalte + @LoadBlanced 實現負載均衡

技術標籤:Spring Cloud系列javaspringcloudconsulresttemplate

RestTempalte + @LoadBlanced 實現負載均衡


一、服務提供者註冊

首先我們將服務提供者註冊到服務中心,為實現服務之間呼叫的負載均衡,我們同時註冊兩個服務提供者,分別為:

一、支付模組:dt-provider-payment 埠為:9001
二、購物車模組:dt-provider-shopping 埠為:9002

此時兩個服務提供者埠號不同,我們將其註冊到註冊中心的時候,保證註冊名稱相同,看配置檔案:

server:
  port: 9002
spring:
  application:
    name: provider-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}  # 註冊到consul的服務名稱
server:
  port: 9001
spring:
  application:
    name: provider-service
  cloud:
    consul
: host: localhost port: 8500 discovery: service-name: ${spring.application.name} # 註冊到consul的服務名稱

此時註冊中心有服務提供者服務,並且provider-service名稱對應我們兩個服務,只是埠不一樣。

編寫兩個服務的控制器方法,並且方法名稱以及方法一樣:

PaymentController.class

 @RequestMapping(value = "/payment/consul")
 public String paymentConsul
() { return "springcloud with consul: " + serverPort + "\t" + UUID.randomUUID().toString(); }

ShoppingController.class

 @RequestMapping(value = "/payment/consul")
 public String paymentConsul() {
     return "springcloud with consul: " + serverPort + "\t" + UUID.randomUUID().toString();
 }
 @Value("${server.port}")
 private String serverPort;

二、服務消費者呼叫

1.編寫服務消費者

上一篇我們提到了,dt-consumer-order訂單模組,其埠號為:8001,在其控制器編寫如下測試程式碼:

server:
  port: 8001
spring:
  application:
    name: consumer-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}  # 註冊到consul的服務名稱
 //@LoadBalanced //必須開啟負載均衡的功能,不然不能呼叫
  private static final String PAYMENT_URL = "http://provider-service";
  @Autowired
  private RestTemplate restTemplate;
  
  @GetMapping(value = "/consumer/payment/consul")
  public String paymentInfo() {
      return restTemplate.getForObject(PAYMENT_URL + "/payment/consul", String.class);
  }

2.RestTemplate中開啟負載均衡支援

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced //開啟負載均衡的功能
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3.啟動服務測試

如下圖9001服務提供者自測通過:
在這裡插入圖片描述
如下圖9002服務提供者自測通過:
在這裡插入圖片描述
如下圖8001服務消費者負載均衡測試通過:
在這裡插入圖片描述
再次重新整理,隨機切換呼叫9002服務埠,實現了服務間的負載均衡呼叫:

在這裡插入圖片描述

總結

其實,在springcloud中,各個服務之間的互相呼叫就是遠端呼叫,而遠端呼叫有很多實現方法,我們現在實現的方式便是在程式碼中通過使用RestTemplate傳送http請求直接呼叫。

其中 RestTemplate就是spring封裝的一個java的http類庫,它簡化了使用java傳送http請求的過程,它也是對其他http類庫的封裝,預設底層使用JDK提供的http連線類。