您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了如何實現Springcloud ribbon負載均衡算法,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
一 前言
經過幾篇的cloud系列文章,我想大家都有一個堅實的基礎,后續的學習就會輕松很多,如果是剛剛來看的讀者需要有eureka基礎知識,或者查閱知識追尋者的cloud系列專欄;這篇文章主要講解如何使用ribbon實現web service客戶端調用,ribbon默認算法實現負載均衡等!
二 ribbon簡介
ribbon是一個客戶端負載均衡器,其能夠整合不同的協議工具進行web service API 調用;
主要特色如下:
提供可插拔式的負載均衡整合服務發現故障彈性恢復cloud支持客戶端整合加載負載均衡
核心工程如下:
ribbon-core:整合其他模塊實現負載均衡
ribbon-eureka: 基于 eureka client 實現 負載均衡
ribbon-httpclient: 包括JSR-311 實現REST 加載負載均衡
三 eureka-client
在之前的 eureka-client工程中創建controller包,并提供表現層接口,代碼如下,然后啟動eureka-client實例2個,分別為8090端口,8091端口;
/** * @Author lsc * <p> 知識追尋者,ribbon provider the restful api</p> */ @RestController public class RibbonProvidderController { @GetMapping("zszxz/ribbon") public String testRibbon(){ return "hell i am zszxz"; } }
四 ribbon-client
4.1 pom.xml
在父工程低下添加新模塊 ribbon-client;原來的start-web依賴在父工程中已經引入,故ribbon模塊中不會再次引入該依賴;
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> </dependencies>
4.2 config
使用restTemplate進行客戶端調用,故需要進行配置,并且在方法上加 @LoadBalanced 注解表示開啟ribbon負載均衡;
/** * @Author lsc * <p> ribbon-restTemplate配置 </p> */ @Configuration public class RibbonConfig { @Bean @LoadBalanced//表示用于負載均衡 RestTemplate restTemplate(){ return new RestTemplate(); } }
4.3 service
創建service類,并且使用restTemplate進行HTTP API 調用;注意點是這邊不使用ip端口,而是直接使用服務的應用名稱 eureka-client ;
/** * @Author lsc * <p> </p> */ @Service public class RibbonService { @Autowired RestTemplate restTemplate; public String testRibbon(){ return restTemplate.getForObject("http://eureka-client/zszxz/ribbon",String.class); } }
4.4 controller
創建表現層類, 用于瀏覽器訪問;
/** * @Author lsc * <p> </p> */ @RestController public class RibbonController { @Autowired RibbonService ribbonService; @GetMapping("ribbon/test") public String testRibbon(){ return ribbonService.testRibbon(); } }
4.5 ribbon啟動類
ribbon的啟動類也是作為 eureka 的客戶端故需要加上@EnableEurekaClient注解;
/** * @Author lsc * <p>知識追尋者 ribbon啟動類 </p> */ @SpringBootApplication @EnableEurekaClient public class RibbonApp { public static void main(String[] args) { SpringApplication.run(RibbonApp.class,args); } }
4.6 application.yml
application.yml 配置中使用端口8092,服務注冊地址分別是peer1,peer2,peer3;
server: port: 8092 spring: application: name: eureka-ribbon # 應用名稱 eureka: client: service-url: # 服務注冊地址 defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
4.7 啟動工程
分別啟動 client ,server ; 如下圖
4.8 瀏覽器訪問結果
瀏覽器結果如下,說明我們在 eureka-ribbon 中使用 restTemplate 結合 ribbon 實現了HTTP 方式從 eureka-clinet 模塊中調用API;
五 ribbon默認負載均衡
LoadBalancerClient 是 ribbon 的一個核心類,其能夠獲得 ribbon提供負載均衡的實例信息;在 ribbon-client模塊中的controller層添加 方法 ,方法主體是獲得實例的端口和主機;以便于于我們分析ribbon負載均衡算法;
@Autowired LoadBalancerClient loadBalanced; @GetMapping("ribbon") public String ribbon(){ ServiceInstance choose = loadBalanced.choose("eureka-client"); String s = "host is :" + choose.getHost() + " port is :" + choose.getPort(); System.out.println(s); return s; }
重啟ribbon-client 工程,使用瀏覽器訪問,控制臺輸出如下,分別調用了8090,8091兩個 eureka-client實例API,說明ribbon默認的負載均衡機制是輪詢算法;
host is :peer1 port is :8091 host is :peer1 port is :8090 host is :peer1 port is :8091 host is :peer1 port is :8090 host is :peer1 port is :8091 host is :peer1 port is :8090 host is :peer1 port is :8091 host is :peer1 port is :8090
以上就是關于如何實現Springcloud ribbon負載均衡算法的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。