Dubbo2 协议迁移

迁移流程说明

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

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

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

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

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

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

定义服务

  1. 定义接口
public interface IWrapperGreeter {

    //... 
    
    /**
     * 这是一个普通接口,没有使用 pb 序列化
     */
    String sayHello(String request);

}
  1. 实现类示例
public class IGreeter2Impl implements IWrapperGreeter {

    @Override
    public String sayHello(String request) {
        return "hello," + request;
    }
}

仅使用 dubbo 协议

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

使用 dubbo 协议启动一个 ProviderConsumer 完成调用。

输出如下: result

仅使用 triple 协议

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

结构如图所示: strust

ProviderConsumer 完成调用。

输出如下:

result

同时使用 dubbo 和 triple 协议

对于线上服务的升级,不可能一蹴而就同时完成 provider 和 consumer 升级, 需要按步操作,

第一步:保证业务稳定。

第二步:provider 提供双协议的方式同时支持 dubbo + tri 两种协议的客户端。

结构如图所示: strust

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

使用 dubbo 协议和 triple 协议启动ProviderConsumer 完成调用。

输出如下:

result


最后修改 January 28, 2023: Update migration.md (#1950) (08812fb294)