Dubbo2 协议迁移
Dubbo2 协议迁移
迁移流程说明
Dubbo2 的用户使用 dubbo 协议 + 自定义序列化,如 hessian2 完成远程调用。
而 Grpc 的默认仅支持 Protobuf 序列化,对于 Java 语言中的多参数以及方法重载也无法支持。
Dubbo3 的之初就有一条目标是完美兼容 Dubbo2,所以为了 Dubbo2 能够平滑升级, Dubbo 框架侧做了很多工作来保证升级的无感,目前默认的序列化和 Dubbo2 保持一致为 hessian2
。
所以,如果决定要升级到 Dubbo3 的 Triple
协议,只需要修改配置中的协议名称为 tri
(注意: 不是 triple )即可。
接下来我们以一个使用 Dubbo2 协议的工程来举例,如何一步一步安全的升级。
- 仅使用
dubbo
协议启动provider
和consumer
,并完成调用。 - 仅使用
tri
协议启动provider
和consumer
,并完成调用。 - 使用
dubbo
协议和tri
协议 启动provider
,以dubbo
协议启动consumer
,并完成调用。
定义服务
- 定义接口
public interface IWrapperGreeter {
//...
/**
* 这是一个普通接口,没有使用 pb 序列化
*/
String sayHello(String request);
}
- 实现类示例
public class IGreeter2Impl implements IWrapperGreeter {
@Override
public String sayHello(String request) {
return "hello," + request;
}
}
仅使用 dubbo 协议
为保证兼容性,我们先将部分 provider 升级到 dubbo3
版本并使用 dubbo
协议。
使用 dubbo
协议启动一个 Provider
和 Consumer
完成调用。
输出结果
仅使用 triple 协议
当所有的 consumer 都升级至支持 Triple
协议的版本后,provider 可切换至仅使用 Triple
协议启动
结构如图所示:
输出结果
同时使用 dubbo 和 triple 协议
对于线上服务的升级,不可能一蹴而就同时完成 provider 和 consumer 升级, 需要按步操作,
第一步:保证业务稳定。
第二步:provider 提供双协议的方式同时支持 dubbo + tri 两种协议的客户端。
结构如图所示:
按照推荐升级步骤,provider 已经支持了 tri 协议,所以 dubbo3 的 consumer 可以直接使用 tri 协议
使用 dubbo
协议和 triple
协议启动Provider
和Consumer
完成调用。
输出结果
最后修改 June 18, 2023: Update migration.md (#2685) (63ffb84035)