自定义dubbo负载均衡器

91 阅读1分钟

负载均衡器(LoadBalance)的核心作用是,通过负载均衡算法,控制各服务的调用量。

1. 使用步骤

   1.  自定义`LoadBalance`,继承`AbstractLoadBalance`,并实现核心方法`doSelect()`   2.  配置 `LoadBalance` 的 `Dubbo SPI` 文件;
   3.  配置使用

2. 使用demo


/**
 * @Description 自定义负载均衡器
 * @Author roy.ding
 * @Date 2022/10/1 19:53:13
 */
public class MyLoadBalance extends AbstractLoadBalance {
    @Override
    protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) {
        //此处是负载均衡算法的核心逻辑
        //要根据自己的业务特点,实现自己的负载均衡算法
        //可以参考已有的算法逻辑,实现自己的。
        return invokers.get(0);//模拟负载均衡算法,简单返回第一个
    }
}


配置在客户端的SPI配置文件内容:myLoadBalance=com.roy.ext.MyLoadBalance



@Service
public class OrderServiceImpl implements OrderService {

  
   @Reference(timeout = 2000, cluster = "myCluster", loadbalance = "myLoadBalance")
   private UserService userService;
   
   @Override
   public List<UserAddress> initOrder(String userId) {
      System.out.println("用户id:"+userId);
      RpcContext.getContext().setAttachment("token","123456");
      //1、查询用户的收货地址
      List<UserAddress> addressList = userService.getUserAddressList(userId);
      return addressList;
   }

}