4-2Ribbon 自定义请求策略 · SpringCloud微服务实战 · 看云

2. 如何自定义请求策略

导航

下面我们自定义负载请求的策略规则,新定义规则需要实现IRule并实现里面的方法,其中规则策略的实现是在choose(Object o)中。比如我们现在实现一个只取第一个注册到Eureka服务中的提供者实例。

本节代码地址


2.1 新建规则类


@Slf4j
public class MyRule implements IRule {

    private ILoadBalancer loadBalancer;

    @Override
    public Server choose(Object o) {
        List<Server> allServers = loadBalancer.getAllServers();
        
        allServers.stream().forEach(server -> System.out.println(server.getHostPort()));
        if(CollectionUtils.isEmpty(allServers)){
            log.info("当前不存在负载调用的提供者实例");
            return null;
        }
        return allServers.get(0);
    }

    @Override
    public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
        this.loadBalancer=iLoadBalancer;
    }

    @Override
    public ILoadBalancer getLoadBalancer() {
        return this.loadBalancer;
    }
}

2.2 修改EurekaRibbonConfig

路径在fw-cloud-ribbon中的com.yisu.ribbon.config.EurekaRibbonConfig
我们只需要替换我们自己定义的负载规则

@Bean
public IRule ribbonRule() {
    
    return new MyRule();
}

2.3 重启客户端

通过postman 重新请求localhost:8771/user/1
多请求几次,会发现返回的结构永远是第一次注册到Eureka服务上的提供者
8e8e9f741f9943fbbb7c57268c71333b_MD5.webp