Dubbo2 协议迁移

Dubbo2 协议迁移流程

Dubbo2 的用户使用 dubbo 协议 + 自定义序列化,如 hessian2 完成远程调用。

而 Grpc 的默认仅支持 Protobuf 序列化,对于 Java 语言中的多参数以及方法重载也无法支持。

Dubbo3的之初就有一条目标是完美兼容 Dubbo2,所以为了 Dubbo2 能够平滑升级, Dubbo 框架侧做了很多工作来保证升级的无感,目前默认的序列化和 Dubbo2 保持一致为hessian2

所以,如果决定要升级到 Dubbo3 的 Triple 协议,只需要修改配置中的协议名称为 tri (注意: 不是triple)即可。

接下来我们我们以一个使用 Dubbo2 协议的工程 来举例,如何一步一步安全的升级。

  1. 仅使用 dubbo 协议启动 providerconsumer,并完成调用。
  2. 使用 dubbotri 协议 启动provider,以 dubbo 协议启动 consumer,并完成调用。
  3. 仅使用 tri 协议 启动 providerconsumer,并完成调用。

定义服务

  1. 定义接口
  1. public interface IWrapperGreeter {
  2. //...
  3. /**
  4. * 这是一个普通接口,没有使用 pb 序列化
  5. */
  6. String sayHello(String request);
  7. }
  1. 实现类如下
  1. public class IGreeter2Impl implements IWrapperGreeter {
  2. @Override
  3. public String sayHello(String request) {
  4. return "hello," + request;
  5. }
  6. }

仅使用 dubbo 协议

为保证兼容性,我们先将部分 provider 升级到 dubbo3 版本并使用 dubbo 协议。

使用 dubbo 协议启动一个 ProviderConsumer ,完成调用,输出如下: result

同时使用 dubbo 和 triple 协议

对于线上服务的升级,不可能一蹴而就同时完成 provider 和 consumer 升级, 需要按步操作,保证业务稳定。 第二步, provider 提供双协议的方式同时支持 dubbo + tri 两种协议的客户端。

结构如图所示: strust

按照推荐升级步骤,provider 已经支持了tri协议,所以 dubbo3的 consumer 可以直接使用 tri 协议

使用dubbo协议和triple协议启动ProviderConsumer,完成调用,输出如下:

result

仅使用 triple 协议

当所有的 consuemr 都升级至支持 Triple 协议的版本后,provider 可切换至仅使用 Triple 协议启动

结构如图所示: strust

ProviderConsumer 完成调用,输出如下:

result

最后修改 December 16, 2022: Fix check (#1736) (97972c1)