本篇文章為大家展示了怎么在SpringCloud中利用Ribbon 實(shí)現(xiàn)負(fù)載均衡,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
maven引入Ribbon
org.springframework.cloud spring-cloud-starter-netflix-ribbon
創(chuàng)建RibbonConfig文件,主類添加@RibbonClient(name = "RibbonConfig", configuration = RibbonConfig.class),我這里偷懶,直接在主類中創(chuàng)建內(nèi)部類
@EnableEurekaClient @RibbonClient(name = "RibbonConfig", configuration = RibbonConfig.class) @SpringBootApplication public class SpringbootSpringdataJpaApplication{ public static void main(String[] args) { SpringApplication.run(SpringbootSpringdataJpaApplication.class, args); } } @Configuration class RibbonConfig { @Bean public IRule ribbonRule(){ return new RandomRule(); //分配策略:隨機(jī)選擇一個(gè)server // return new BestAvailableRule(); //分配策略:選擇一個(gè)最小的并發(fā)請(qǐng)求的server,逐個(gè)考察Server,如果Server被tripped了,則忽略 // return new RoundRobinRule(); //分配策略:輪詢選擇,輪詢index,選擇index對(duì)應(yīng)位置的server // return new WeightedResponseTimeRule(); //分配策略:根據(jù)響應(yīng)時(shí)間分配一個(gè)weight(權(quán)重),響應(yīng)時(shí)間越長(zhǎng),weight越小,被選中的可能性越低 // return new ZoneAvoidanceRule(); //分配策略:復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇server // return new RetryRule(); //分配策略:對(duì)選定的負(fù)載均衡策略機(jī)上重試機(jī)制,在一個(gè)配置時(shí)間段內(nèi)當(dāng)選擇server不成功,則一直嘗試使用subRule的方式選擇一個(gè)可用的server } @Bean public IPing ribbonPing() { return new PingUrl(); } @Bean public ServerListSubsetFilter serverListFilter() { ServerListSubsetFilter filter = new ServerListSubsetFilter(); return filter; } }
下表顯示了Spring Cloud Netflix默認(rèn)為Ribbon提供的bean:
官網(wǎng)例子:
我們添加一個(gè)測(cè)試接口
@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/ribbon") public String ribbon() { return "springdatejpa -- 我的端口是:10088"; } }
第二個(gè)服務(wù)提供者也是這樣配置,注意:應(yīng)用名要相同(spring.application.name=springdatejpa);端口不同;
服務(wù)消費(fèi)者
服務(wù)消費(fèi)者使用Feign調(diào)用,無需做任何修改,F(xiàn)eign已經(jīng)使用Ribbon。具體配置請(qǐng)戳:SpringCloud系列——Feign 服務(wù)調(diào)用
@FeignClient(name = "springdatejpa", path = "/user/") public interface MyspringbootFeign { @RequestMapping("/ribbon") String ribbon(); }
/** * feign調(diào)用 */ @GetMapping("feign/ribbon") String ribbon(){ return myspringbootFeign.ribbon(); }
效果
啟動(dòng)所有項(xiàng)目,我們注冊(cè)了三個(gè)服務(wù),其中:
有兩個(gè)服務(wù)名稱相同、處理的業(yè)務(wù)相同、端口不同,這兩臺(tái)作為服務(wù)提供者(可看做是一個(gè)“小集群”);
另一個(gè)是服務(wù)消費(fèi)者(Feign調(diào)用);
消費(fèi)者不斷調(diào)用,Ribbon會(huì)從注冊(cè)中心的服務(wù)列表拉取實(shí)例集合進(jìn)行負(fù)載均衡調(diào)用背后的服務(wù)提供者
上述內(nèi)容就是怎么在SpringCloud中利用Ribbon 實(shí)現(xiàn)負(fù)載均衡,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。