Dubbo 注册,调用,通信,容错

Dubbo简化模型

Dubbo 注册,调用,通信,容错_第1张图片

3种开发方式

开发方式

举例

特点

XML配置

业务代码零侵入

扩展修改方便

注解方式

@EnableDubbo

@DubboService

@DubboReference

扩展修改方便

修改需要重新编译代码

API编程

DubboBootstrap

ServiceConfig

ReferenceConfig应用

业务侵入性大

修改复杂

修改后需要重新编译

Dubbo 提供者

注册流程

Dubbo 注册,调用,通信,容错_第2张图片

隐式参数

不改变发布者的接口定义的情况下,传递参数

设置参数RpcContext.getContext().setAttachment("parameter",123);

获取参数RpcContext.getContext().getAttachment("parameter");

生产一般不适应,防止产生技术债务

多版本发布流程

1.低流量时段,先升级一半提供者为新版本。

2.升级消费者为新版本

3.之后将剩下的一般提供者调整为最新版本

服务调用者

调用流程

Dubbo 注册,调用,通信,容错_第3张图片

EchoService

所有Dubbo 引用的服务,都可以强转为EchoService, 内部方法$echo ,可以用于测试调用链路是否是通的。

GenericService 泛化调用,生产应禁用

没有API的模型,参数返回值都是Map

通讯机制

Protocol协议层

Exchange 信息交换层,封装请求,响应

Transport 网络传输层,依托netty,封装统一接口

Serialize 序列化层,数据序列化,反序列化

Dubbo 注册,调用,通信,容错_第4张图片

核心接口

Protocol 接口 export 提供者使用 暴露服务, refer调用者使用,引用服务

Exchanger 接口 bind 提供者使用绑定服务 connect调用者使用, 连接服务

Transport 接口 bind 提供者使用服务端 connect 调用者使用,连接服务

举例:

DubboProtocol 创建ExchangeServer (HeaderExchanger)

HeaderExchanger :

  1. HeatbeatTimer 心跳机制
  2. 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 一般不使用

你可能感兴趣的:(架构相关,dubbo,java,开发语言)