1.自定义规则
public class MyRule implements IRule {
private ILoadBalancer lb;
public Server choose(Object key) {
System.out.println("这是自定义的规则类");
Random r = new Random();
int randomNum = r.nextInt(10);
List<Server> servers = lb.getAllServers();
if(randomNum > 7) {
Server s = getServerByPort(servers, 8081);
return s;
}
return getServerByPort(servers, 8080);
}
private Server getServerByPort(List<Server> servers, int port) {
for(Server s : servers) {
if(s.getPort() == port) {
return s;
}
}
return null;
}
public void setLoadBalancer(ILoadBalancer lb) {
this.lb = lb;
}
public ILoadBalancer getLoadBalancer() {
return lb;
}
}
2.
@Bean
public IRule getRule() {
return new MyRule();
}
3.
@RibbonClient(name = "spring-lb-provider", configuration = MyConfig.class)
public class MyClient {
}
4。Cntroller 里面要用 LoadBalancerClient 的choose方法
@Autowired
private LoadBalancerClient client;
@RequestMapping(value = "/lb", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ServiceInstance lb() {
ServiceInstance si = client.choose("spring-lb-provider");
return si;
}
另一种是启动了直接加上也可以,这个是全局的
@Bean
public IRule getRule() {
return new MyRule();
}