dubbo调用模块

dubbo的调用模块也即是一个完整的RPC框架应有哪些模块
1.透明代理:通过动态代理技术(dubbo使用的是javassist来实现),屏蔽远程调用细节以提高编程友好性,将远程调用和普通的接口调用同样的实现方式
2.负载均衡:当有多个提供者时,如何选择使用那个进行调用的负载算法
3.容错机制:当服务调用失败时采取的策略
4.调用方式:支持同步调用和异步调用

在这里插入图片描述

1.透明代理

通过动态代理的方式进行实现 dubbo默认动态代理javassist
参见源代码
com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory
com.alibaba.dubbo.common.bytecode.Proxy

2.负载均衡

dubbo支持四种负载均衡算法
1.随机(random):按照权重设置随机概率
2.轮询(roundrobin):按公约后的权重设置轮询比例
3.最少活跃数(leastactive):相同活跃数的随机,活跃数是指调用前后的计数差
4.一致性hash(consistenthash):相同的参数总是发送到同一台机器上

3.容错机制

1.失败自动切换:调用失败后重试其他服务器
2.快速失败:只发起一次调用,失败后立即报错
3.忽略失败:失败后忽略,不抛出异常给客户端
4. 失败重试:失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知
5. 并行调用:同时给服务端发送多笔报文,只要一个成功返回。
6. 广播调用:广播所有的服务者,逐个调用,任意一台报错则报错

4.异步调用

1.同步等待结果返回
2.异步等待结果返回
3.不需要等待结果返回
在这里插入图片描述

调用通信内部实现

在这里插入图片描述

dubbo长连接实现和配置
1.初始连接
引用服务增加提供者===》获取连接===》是否获取共享连接====》创建连接客户端===》开启心跳检测状态检查定时任务===》开启连接状态检测
com.alibaba.dubbo.remoting.transport.netty.NettyTransporter#connect
com.alibaba.dubbo.remoting.transport.netty.NettyClient#doConnect
com.alibaba.dubbo.remoting.transport.AbstractClient#connect
2.心跳发送
一个线程轮询每个2s中发送一次心跳检查
com.alibaba.dubbo.remoting.transport.AbstractClient#initConnectStatusCheckCommand
3.断线重连
com.alibaba.dubbo.remoting.transport.AbstractClient#connect
4.连接销毁
心跳检测连续20次即40s都没有检测成功 zookeeper则会通知连接销毁
com.alibaba.dubbo.remoting.transport.AbstractClient#destroyConnectStatusCheckCommand

try {
            if (reconnectExecutorFuture != null && !reconnectExecutorFuture.isDone()) {
                reconnectExecutorFuture.cancel(true);
                reconnectExecutorService.purge();
            }
        } catch (Throwable e) {
            logger.warn(e.getMessage(), e);
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值