Ribbon實現負載均衡呼叫服務
阿新 • • 發佈:2021-09-29
使用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);