Ribbon是用於實現服務與服務之間的負載均衡的技術。官網原文:Ribbon is a client-side load balancer that gives you a lot of control over the behavior of HTTP and TCP clients.html
已知Eureka Client會從Eureka Server上拉取服務信息保存在本地緩存中,當被調用的服務是集羣方式部署時,調用端本地緩存就會存在多個目標服務的信息,而此時就須要經過必定的策略決定調用哪一個服務(負載均衡)。而Ribbon就是用來實現負載均衡的。根據實施位置,可分爲:java
示例提供兩個dept服務給emp模塊調用spring
複製一個dept模塊的啓動器,並修改啓動端口爲8082緩存
在emp模塊中添加以下依賴併發
<!--Ribbon--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
@Configuration public class RestConfig { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
修改服務調用app
修改接口調用的代碼,將IP+PORT改爲服務名稱,也就是註冊到Eureka中的名稱。接口調用的時候,框架內部會將服務名稱替換成具體的服務IP信息,而後進行調用。負載均衡
使用restTemplate.getForObject("http://目標服務名/目標接口路徑", 返回值類型)的方法,獲取返回值。框架
@RestController public class EmpController { @Autowired private RestTemplate restTemplate; @GetMapping("/emp/all") public String getAll() { //經過restTemplate對象訪問目標服務 String result = restTemplate.getForObject("http://dept/dept/all", String.class); //獲取目標結果並返回 System.out.println(result); return "emp: " + "\t" + result; } }
啓動Eureka Server及Eureka Client,訪問emp模塊的功能。dom
Ribbon做爲一款客戶端負載均衡框架,默認的負載策略是輪詢,同時也提供了不少其餘的策略,可以讓用戶根據自身的業務需求進行選擇。ide
以下是Ribbon提供的策略接口IRule及其實現類 的UML圖
經常使用策略介紹:
在EMP模塊添加以下配置類便可
@Configuration public class RibbonConfig { @Bean public IRule rule() { return new RandomRule(); //return new RoundRobinRule(); //return new WeightedResponseTimeRule(); //return new BestAvailableRule(); } }
在調用方yml文件中指定目標服務的負載均衡策略,此方式可單獨指定每一個服務的策略類型。配置以下:
DEPT: #目標服務名 ribbon: #指定負載均衡策略 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
官網說明以下 :