通過實現 IRule 接口可以自定義負載策略,主要的選擇服務邏輯在 choose 方法中。我們這邊只是演示怎麼自定義負載策略,所以沒寫選擇的邏輯,直接返回服務列表中第一個服務。具體代碼如下所示。
public class MyRule implements IRule {
private ILoadBalancer lb;
@Override
public Server choose(Object key) {
List<Server> servers = lb.getAllServers();
for (Server server : servers) {
System.out.println(server.getHostPort());
}
return servers.get(0);
}
@Override
public void setLoadBalancer(ILoadBalancer lb) {
this.lb = lb;
}
@Override
public ILoadBalancer getLoadBalancer() {
return lb;
}
}
在 Spring Cloud 中,可通過配置的方式使用自定義的負載策略,ribbon-config-demo 是調用的服務名稱。
ribbon-config-demo.ribbon.NFLoadBalancerRuleClassName=net.biancheng.ribbon_eureka_demo.rule.MyRule
重啓服務,訪問調用了其他服務的接口,可以看到控制檯的輸出信息中已經有了我們自定義策略中輸出的服務信息,並且每次都是調用第一個服務。這跟我們的邏輯是相匹配的。