Dubbo2 协议迁移
Dubbo2 协议迁移流程
Dubbo2 用户使用 dubbo 协议 + 自定义序列化,例如 hessian2 来完成远程调用。
默认情况下,Grpc 只支持 Protobuf 序列化,它不支持 Java 语言中的多参数和方法重载。
在 Dubbo3 之初,一个目标是与 Dubbo2 完全兼容。因此,为了确保 Dubbo2 的平滑升级,Dubbo 框架做了大量工作来确保升级无缝进行。目前,默认序列化与 Dubbo2 一致,为 hessian2
。
因此,如果您决定升级到 Dubbo3 的 Triple
协议,您只需要在配置中将协议名称修改为 tri
(注意:不是 triple)。
接下来我们以一个 [项目] (https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/ org/apache/dubbo/sample/tri/migration) 为例,如何逐步安全地升级。
- 仅使用
dubbo
协议启动provider
和consumer
,并完成调用。 - 使用
dubbo
和tri
协议启动provider
,使用dubbo
协议启动consumer
,并完成调用。 - 仅使用
tri
协议启动provider
和consumer
,并完成调用。
定义服务
- 定义接口
public interface IWrapperGreeter {
//...
/**
* This is a normal interface, not serialized using pb
*/
String sayHello(String request);
}
- 实现类如下
public class IGreeter2Impl implements IWrapperGreeter {
@Override
public String sayHello(String request) {
return "hello," + request;
}
}
仅使用 dubbo 协议
为了确保兼容性,我们首先将一些提供者升级到 dubbo3
版本并使用 dubbo
协议。
使用 dubbo
协议启动 [Provider
] (https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org /apache/dubbo/sample/tri/migration/ApiMigrationDubboProvider.java) 和 Consumer
,完成调用,输出如下:
同时使用 dubbo 和 triple 协议
对于在线服务的升级,不可能同时完成提供者和消费者的升级。需要逐步操作以确保业务稳定。在第二步中,提供者提供了一种双协议方式,同时支持 dubbo + tri 客户端。
结构如图所示:
根据推荐的升级步骤,提供者已经支持 tri 协议,因此 dubbo3 的消费者可以直接使用 tri 协议
使用 dubbo
协议和 triple
协议启动 [Provider
] (https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main /java/org/apache/dubbo/sample/tri/migration/ApiMigrationBothProvider.java) 和 [Consumer
](https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/ dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationBothConsumer.java), 完成调用,输出如下
仅使用 triple 协议
当所有消费者都升级到支持 Triple
协议的版本时,可以将提供者切换为仅使用 Triple
协议启动
结构如图所示:
[Provider](https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/ migration/ApiMigrationTriProvider.java) 和 [Consumer](https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri /migration/ApiMigrationTriConsumer.java) 完成调用,输出如下