SpringCloud Ribbon(二)之自定義負載均衡規則
阿新 • • 發佈:2021-02-14
技術標籤:Spring Cloud
一、Ribbon負載均衡規則
一個服務對應一個LoadBalancer,一個LoadBalancer只有一個Rule,LoadBalancer記錄服務的註冊地址,Rule提供從服務的註冊地址中找出一個地址的規則。
二、 自定義負載均衡規則
本文自定義負載均衡規則提供根據指定URI優先轉發到特定的機器的功能。
三、實現程式碼
(1)負載均衡規則實現類
public class MicroServiceLoadBalanceRule extends AbstractLoadBalancerRule { @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { } @Override public 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路徑優先轉發到指定的機器 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