1. 程式人生 > 其它 >Ribbon實現負載均衡呼叫服務

Ribbon實現負載均衡呼叫服務

使用Ribbon實現負載均衡呼叫服務

1.Ribbon 服務呼叫

- 說明: 
	1.如果使用的是eureka client 和 consul client,無須引入依賴,因為在eureka,consul中預設集成了ribbon元件
	2.如果使用的client中沒有ribbon依賴需要顯式引入如下依賴
<!--引入ribbon依賴-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

2.檢視consul client中依賴的ribbon

依賴項中自行檢視

3.使用restTemplate + ribbon進行服務呼叫

    - 使用discovery client  進行客戶端呼叫(需要手動實現負載均衡)
          @Autowired
          private DiscoveryClient discoveryClient;

          //獲取服務列表
          List<ServiceInstance> products = discoveryClient.getInstances("服務ID");
          for (ServiceInstance product : products) {
            log.info("服務主機:[{}]",product.getHost());
            log.info("服務埠:[{}]",product.getPort());
            log.info("服務地址:[{}]",product.getUri());
            log.info("====================================");
          }

    - 使用loadBalanceClient 進行客戶端呼叫
          @Autowired
          private LoadBalancerClient loadBalancerClient;
          //根據負載均衡策略選取某一個服務呼叫
          ServiceInstance product = loadBalancerClient.choose("服務ID");
          log.info("服務主機:[{}]",product.getHost());
          log.info("服務埠:[{}]",product.getPort());
          log.info("服務地址:[{}]",product.getUri());

    - 使用@LoadBalanced     進行客戶端呼叫
          //1.整合restTemplate + ribbon
          @Bean
          @LoadBalanced
          public RestTemplate getRestTemplate(){
            return new RestTemplate();
          }
          //2.呼叫服務位置注入RestTemplate
          @Autowired
          private RestTemplate restTemplate;
          //3.呼叫
          String forObject = restTemplate.getForObject("http://服務ID/hello/hello?name=" + name, String.class);