Dubbo简化模型
3种开发方式
开发方式 | 举例 | 特点 |
XML配置 | 等 | 业务代码零侵入 扩展修改方便 |
注解方式 | @EnableDubbo @DubboService @DubboReference | 扩展修改方便 修改需要重新编译代码 |
API编程 | DubboBootstrap ServiceConfig ReferenceConfig应用 | 业务侵入性大 修改复杂 修改后需要重新编译 |
Dubbo 提供者
注册流程
隐式参数
不改变发布者的接口定义的情况下,传递参数
设置参数RpcContext.getContext().setAttachment("parameter",123);
获取参数RpcContext.getContext().getAttachment("parameter");
生产一般不适应,防止产生技术债务
多版本发布流程
1.低流量时段,先升级一半提供者为新版本。
2.升级消费者为新版本
3.之后将剩下的一般提供者调整为最新版本
服务调用者
调用流程
EchoService
所有Dubbo 引用的服务,都可以强转为EchoService, 内部方法$echo ,可以用于测试调用链路是否是通的。
GenericService 泛化调用,生产应禁用
没有API的模型,参数返回值都是Map
通讯机制
Protocol协议层
Exchange 信息交换层,封装请求,响应
Transport 网络传输层,依托netty,封装统一接口
Serialize 序列化层,数据序列化,反序列化
核心接口
Protocol 接口 export 提供者使用 暴露服务, refer调用者使用,引用服务
Exchanger 接口 bind 提供者使用绑定服务 connect调用者使用, 连接服务
Transport 接口 bind 提供者使用服务端 connect 调用者使用,连接服务
举例:
DubboProtocol 创建ExchangeServer (HeaderExchanger)
HeaderExchanger :
- HeatbeatTimer 心跳机制
- Transport#bind
NettyTransporter 2个版本,一般使用的是4的那个版本
内部创建nettyServer,使用AbstractServer#send 委托Channel 发送消息
容错
集群容错
cluster配置+重试retries @DubboReference说明
cluster配置 项
failover 一个提供者不行,尝试下一个
failfast 提供者失败,抛出异常
failsafe 提供者失败,提供者记录日志
failback 提供者A失败,定时重试,继续访问提供者A
forking 并行访问,有一个提供者返回成功,就返回
broadcast 广播,任意提供者失败,就报错
服务降级
首选明确,核心流程是不能降级的!@DubboReference 的mock进行配置
2中方式 调用者mock 一般用这个,
提供者stub 一般不使用