這篇文章主要為大家展示了“Spring Cloud中負載均衡器Ribbon原理的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“Spring Cloud中負載均衡器Ribbon原理的示例分析”這篇文章吧。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設計制作、成都網(wǎng)站設計與策劃設計,洪澤網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設十年,網(wǎng)設計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:洪澤等地區(qū)。洪澤做網(wǎng)站價格咨詢:13518219792
Ribbon簡介
分布式系統(tǒng)中,各個微服務會部署多個實例,如何將服務消費者均勻分攤到多個服務提供者實例上,就要使用到負載均衡器
Ribbon 是負載均衡器 ,它提供了很多負載均衡算法,例如輪詢、隨即等,在配置服務提供者地址后,可以將服務消費者請求均勻的分發(fā)
為服務消費者整合Ribbon
添加 Ribbon 依賴庫
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-ribbobn</artifactId> </dependency>
給 RestTemplate 添加 @LoadBalaced 注解,就可整合 RestTemplate 和 Ribbon
@Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }
修改Controller,請求地址修改為 http://flim-user/user/ ,當 Ribbon 和 Eureka 配合使用時,會自動將虛擬主機名映射成微服務的網(wǎng)絡地址,并注入了 LoadBalancerClient 輸出當前選擇的微服務節(jié)點
@RestController public class MovieController { private final Logger log = LoggerFactory.getLogger(MovieController.class); @Autowired private RestTemplate restTemplate; @Autowired private LoadBalancerClient loadBalancerClient; @GetMapping("/user/{id}") public User findById(@PathVariable int id){ return this.restTemplate.getForObject("http://flim-user/"+id,User.class); } @GetMapping("/log-instance") public void logInstance(){ ServiceInstance serviceInstance = this.loadBalancerClient.choose("flim-user"); log.info("{}:{}:{}",serviceInstance.getServiceId(),serviceInstance.getHost(),serviceInstance.getPort()); } }
運行測試程序
啟動 Eureka Server
啟動 2 個或更多 flim-user 實例
啟動 flim-consumer
訪問 http://localhost:8761/ 查看微服務 flim-user 是否注冊成功
多次訪問 http://localhost:8010/user/1 會返回如下結(jié)果
{"id":1,"username":"account1","name":"張三","age":20,"balance":100.00}
多次訪問 http://localhost:8010/log-instance 控制臺會輸出以下信息
可以看到請求會均勻的分布到兩個用戶微服務上
2017-12-17 20:47:53.975 INFO 12313 --- [nio-8010-exec-2] com.linyuan.controller.MovieController : flim-user:linyuandembp:8764
2017-12-17 20:47:54.215 INFO 12313 --- [nio-8010-exec-1] com.linyuan.controller.MovieController : flim-user:linyuandembp:8763
2017-12-17 20:47:54.445 INFO 12313 --- [nio-8010-exec-3] com.linyuan.controller.MovieController : flim-user:linyuandembp:8764
2017-12-17 20:47:54.690 INFO 12313 --- [nio-8010-exec-4] com.linyuan.controller.MovieController : flim-user:linyuandembp:8763
2017-12-17 20:47:54.935 INFO 12313 --- [nio-8010-exec-5] com.linyuan.controller.MovieController : flim-user:linyuandembp:8764
注意 :不能將 restTemplate.getForObject(...) 與 loadBalancerClient.choose(...) 寫在同一方法中,因為 rest-Template 實際上就是一個 Ribbon 客戶端,本身已經(jīng)包含“choose”行為
代碼方式配置 Ribbon
可以使用Java代碼或?qū)傩宰远x Ribbon 的配置,Ribbon 默認配置類是 RibbonClientConfiguration,也可以使用一個 POJO 自定義 Ribbon 配置,這種 配置是細粒度的,不同的 Ribbon 客戶端可以使用不同的配置
創(chuàng)建 Ribbon 配置類
/** * 該類為配置類 * 不應該被ComponentScan掃描 */ @Configuration public class RibbonConfiguration { @Bean public IRule ribbonRule(){ //配置負載均衡的規(guī)則,更改為隨機 return new RandomRule(); } }
使用 @RibbonClient 或 @RibbonClients 注解為服務提供者指定配置類
@SpringBootApplication @EnableDiscoveryClient @RibbonClient(name = "flim-user",configuration = RibbonConfiguration.class) public class FlimConsumerApplication { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(FlimConsumerApplication.class, args); } }
訪問測試地址 http://localhost:8010/log-instance 可看見請求會隨機分布到兩微服務上
2017-12-17 21:08:52.769 INFO 12524 --- [nio-8010-exec-7] com.linyuan.controller.MovieController : flim-user:linyuandembp:8763
2017-12-17 21:08:52.946 INFO 12524 --- [nio-8010-exec-8] com.linyuan.controller.MovieController : flim-user:linyuandembp:8763
2017-12-17 21:08:53.138 INFO 12524 --- [nio-8010-exec-9] com.linyuan.controller.MovieController : flim-user:linyuandembp:8763
2017-12-17 21:08:53.319 INFO 12524 --- [io-8010-exec-10] com.linyuan.controller.MovieController : flim-user:linyuandembp:8764
2017-12-17 21:08:53.511 INFO 12524 --- [nio-8010-exec-1] com.linyuan.controller.MovieController : flim-user:linyuandembp:8763
注意 :RibbonConfiguration 類不能被 @ComponentScan 掃描到,否則配置信息就會被所有 @RibbonClient 共享,因此如果只想自定義某個 Ribbon 客戶端的配置,必須防止被 @ComponentScan 掃描
配置文件方式配置 Ribbon
通過配置文件方式自定義 Ribbon 屬性更加方便,配置的前綴是 <clientName>.ribbon.
NFLoadBalancerClassName:配置 ILoadBalancer 的實現(xiàn)類
NFLoadBalancerRuleClassName:配置 IRule 的實現(xiàn)類
NFLoadBalancerPingClassName:配置 IPing 實現(xiàn)類
NIWSServerListClassName:配置 ServerList 的實現(xiàn)類
NIWSServerListFilterClassName:配置 ServerListFilter 的實現(xiàn)類
通過配置文件定義Ribbon配置
flim-user: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
常用的 Ribbon 全局配置
ribbon: ConnectionTimeout: #連接超時時間 ReadTimeout: #讀取超時時間 OkToRetryOnAllOperatotions: #對所有操作請求都進行重試 MaxAutoRetriesNextServer: #切換服務器實例的重試次數(shù) MaxAutoRetries: #對當前實例的重試次數(shù) ServerListRefreshInterval: #刷新服務列表源的間隔時間
以上是“Spring Cloud中負載均衡器Ribbon原理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁題目:SpringCloud中負載均衡器Ribbon原理的示例分析
文章起源:http://vcdvsql.cn/article2/gjggic.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站制作、微信公眾號、微信小程序、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)