當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringCloud Ribbon(二)之自定义负载均衡策略IRule
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我们负责实现!中国计划首次实施近地小行星
- 下一篇: gradle idea java ssm