dubbo自定义集群扩展

  1. 新建集群
    import com.alibaba.dubbo.rpc.Invoker;
    import com.alibaba.dubbo.rpc.RpcException;
    import com.alibaba.dubbo.rpc.cluster.Cluster;
    import com.alibaba.dubbo.rpc.cluster.Directory;
    
    public class IpRouteCluster implements Cluster {
    
        public final static String NAME = "iproute";
    
        @Override
        public <T> Invoker<T> join(Directory<T> directory) throws RpcException {
            return new IpRouteClusterInvoker<T>(directory);
        }
    
    }

  2. 新建集群调用者
    import com.alibaba.dubbo.common.logger.Logger;
    import com.alibaba.dubbo.common.logger.LoggerFactory;
    import com.alibaba.dubbo.rpc.Invocation;
    import com.alibaba.dubbo.rpc.Invoker;
    import com.alibaba.dubbo.rpc.Result;
    import com.alibaba.dubbo.rpc.RpcException;
    import com.alibaba.dubbo.rpc.cluster.Directory;
    import com.alibaba.dubbo.rpc.cluster.LoadBalance;
    import com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker;
    import com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker;
    import lombok.extern.slf4j.Slf4j;
    
    import java.util.List;
    
    @Slf4j
    public class IpRouteClusterInvoker<T> extends AbstractClusterInvoker<T> {
    
        private FailoverClusterInvoker<T> failoverClusterInvoker;
    
        private static final Logger logger = LoggerFactory.getLogger(IpRouteClusterInvoker.class);
    
        public IpRouteClusterInvoker(Directory<T> directory) {
            super(directory);
            failoverClusterInvoker = new FailoverClusterInvoker<>(directory);
        }
    
        @Override
        protected Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {
            // TODO 筛选策略
            // Failover Cluster 失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。
            // Failfast Cluster 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
            // Failsafe Cluster 失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
            // Failback Cluster 失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
            // Forking Cluster 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
            // Broadcast Cluster 广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
            return failoverClusterInvoker.doInvoke(invocation,invokers,loadbalance);
        }
    }

  3. 在/resrouces/META-INF/dubbo/目录新建com.alibaba.dubbo.rpc.cluster.Cluster配置文件
    iproute=com.zjy.iot.smart.gateway.framework.handler.IpRouteCluster

  4. 在Consumer端配置Cluster
    <dubbo:consumer cluster="iproute"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值