负载均衡器(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;
}
}