背景
最近在研究即时消息推送系统(IM系统)的架构,自己用netty开发了基础网络通信部分,用来维护TCP连接,在客户端上线时将用户标识userId和路由信息存在redis中,通过dubbo向上层模块提供消息推送接口。
在上层消息转发路由模块设计时,遇到了一个问题,dubbo接口调用时要根据路由信息中的ip指定对应的provider服务器。研究了下资料发现可以通过dubbo SPI自定义负载均衡策略或者路由规则来实现,由于自定义路由规则没找到相关试例,自己试了下自定义负载均衡策略。
负载均衡扩展
实现dubbo提供的com.alibaba.dubbo.rpc.cluster.LoadBalance接口
public class IpLoadBalance implements LoadBalance {
@Override
public <T> Invoker<T> select(List<Invoker<T>> list, URL url, Invocation invocation) throws RpcException {
// 遍历invoker,取IP和入参中相等的返回
for (Invoker<T> invoker : list) {
// invocation.getArguments()可以获取调用时的参数,此处[2]即为参数中的ip字段
if (invoker.getUrl