日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud Ribbon(二)之自定义负载均衡策略IRule

發(fā)布時(shí)間:2023/12/3 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud Ribbon(二)之自定义负载均衡策略IRule 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Ribbon負(fù)載均衡策略

一個(gè)服務(wù)對(duì)應(yīng)一個(gè)LoadBalancer,一個(gè)LoadBalancer只有一個(gè)Rule,LoadBalancer記錄服務(wù)的注冊(cè)地址,Rule提供從服務(wù)的注冊(cè)地址中找出一個(gè)地址的規(guī)則。

Ribbon提供七種負(fù)載均衡策略,默認(rèn)的負(fù)載均衡策略是輪訓(xùn)策略。

名稱解釋
RoundRobinRule輪訓(xùn)策略
RandomRule隨機(jī)策略
BestAvailableRule過濾出故障服務(wù)器后,選擇一個(gè)并發(fā)量最小的
WeightedResponseTimeRule針對(duì)響應(yīng)時(shí)間加權(quán)輪詢
AvailabilityFilteringRule可用過濾策略,先過濾出故障的或并發(fā)請(qǐng)求大于閾值的一部分服務(wù)實(shí)例,然后再以線性輪詢的方式從過濾后的實(shí)例清單中選出一個(gè);
ZoneAvoidanceRule從最佳區(qū)域?qū)嵗现羞x擇一個(gè)最優(yōu)性能的服務(wù)實(shí)例
RetryRule選擇一個(gè)Server,如果失敗,重新選擇一個(gè)Server重試

?

二、 自定義負(fù)載均衡策略

本文自定義負(fù)載均衡規(guī)則提供根據(jù)指定URI優(yōu)先轉(zhuǎn)發(fā)到特定的機(jī)器的功能。

?

三、實(shí)現(xiàn)代碼

(1)負(fù)載均衡策略實(shí)現(xiàn)類

public class MicroServiceLoadBalanceRule extends AbstractLoadBalancerRule {@Overridepublic void initWithNiwsConfig(IClientConfig iClientConfig) {}@Overridepublic Server choose(Object key) {ILoadBalancer lb = getLoadBalancer();if (lb == null) {return null;}List<Server> servers = lb.getReachableServers();if (servers.isEmpty()){return null;}RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();String uri = request.getRequestURI();boolean specialApi = uri.startsWith("/api") ;// /api路徑優(yōu)先轉(zhuǎn)發(fā)到指定的機(jī)器if(specialApi){String ip = "192.168.2.3";Server chooseServer = null;for (Server server : servers) {if (server.getHost().equals(ip)) {chooseServer = server;}}if(chooseServer == null){chooseServer = servers.stream().findFirst().orElse(null);}return chooseServer;}return servers.get(new Random().nextInt(servers.size()));} }

(2)application.yaml文件配置

micro-service:ribbon:NFLoadBalancerRuleClassName: com.mk.springcloud.gateway.loadbalance.MicroServiceLoadBalanceRule

(3) 代碼配置

public class MicroRibbonConfig {@Beanpublic IRule microIRule(){return new MicroServiceLoadBalanceRule();}}@RibbonClient(name = "micro-service", configuration = MicroRibbonConfig.class) public class RibbonClientConfig {}

?

總結(jié)

以上是生活随笔為你收集整理的SpringCloud Ribbon(二)之自定义负载均衡策略IRule的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。