在spring-cloud-demo工程中添加module:demo-service-ribbon
在pom.xml文件中加入依賴:java
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> </dependencies>
在resource目錄下增長application.properties文件,添加以下內容:算法
################## 服務配置 ############### server.port=9136 spring.application.name=demo-service-ribbon #註冊到註冊中心 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/
建立一個啓動類:ServiceRibbonApplication.java,添加以下內容:spring
@SpringBootApplication @EnableDiscoveryClient public class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } @Bean @LoadBalanced ////負載均衡配置 RestTemplate restTemplate() { return new RestTemplate(); } }
添加Service類:DemoRibbonService.java,添加以下內容:併發
@Service public class DemoRibbonService { @Autowired RestTemplate restTemplate; public String port() { return restTemplate.getForObject("http://demo-service/port", String.class); } }
添加Controller類:DemoRibbonController.java,添加以下內容:app
@RestController public class DemoRibbonController { @Autowired DemoRibbonService demoRibbonService; @RequestMapping("hello") public String port() { return demoRibbonService.port(); } }
分別使用980六、9807端口運行以前構建的demo-service工程
在運行demo-service-ribbon項目,訪問:http://localhost:9136/hello,顯示以下:
I am demo-service, I'm from port : 9806
再次訪問http://localhost:9136/hello,顯示以下:
I am demo-service, I'm from port : 9807負載均衡
說明demo-service-ribbon工程中加了@LoadBalanced註解的restTemplate在訪問demo-service服務時使用了Ribbon的負載均衡功能dom
RandomRule:從服務列表中隨機取一個服務實例rest
RoundRobinRule:從服務列表中以輪詢的方式取實例code
RetryRule:根據maxRetryMillis最大重試時間參數在獲取服務實例失敗時重試獲取服務實例server
WeightedResponseTimeRule
該策略是對RoundRobinRule的擴展, 增長了根據實例的運行狀況來計算權重, 並根據權重來挑選實例, 以達到更優的分配效
ClientConfigEnabledRoundRobinRule
這個策略跟RoundRobinRule功能相同,其做用是能夠繼承這個策略重寫choose()方法,當自定義的選擇策略沒法實施時能夠用父類的策略做爲備選方案
BestAvailableRule
該策略繼承自ClientConfigEnabledRoundRobinRule, 在實現中它注入了負載均衡器的統計對象LoadBalancerStats , 同時在具體的choose 算法中利用LoadBalancerStats 保存的實例統計信息來選擇知足要求的實例。從源碼中看出, 它經過遍歷負載均衡器中維護的全部服務實例,會過濾掉故障的實例, 並找出併發發請求數最小的一個, 因此該策略的特性是可選出最空閒的實例。
ZoneAvoidanceRule
待補充。。
以配置隨機策略爲例
在啓動類文件ServiceRibbonApplication.java中加入方法:
//新增隨機策略 @Bean public IRule ribbonRule() { return new RandomRule(); //這裏選擇隨機策略,對應配置文件 }
分別使用980六、9807端口運行以前構建的demo-service工程 再運行demo-service-ribbon項目,訪問:http://localhost:9136/hello,多訪問幾回就會發現返回的端口就是隨機的了 I am demo-service, I'm from port : 9806 I am demo-service, I'm from port : 9807 I am demo-service, I'm from port : 9806 I am demo-service, I'm from port : 9806