blob: 36d71387bb14feb599b32dbed846c9b64eb38c7d [file] [log] [blame]
---
aliases:
- /zh/docs3-v2/java-sdk/reference-manual/protocol/triple/migration/
- /zh-cn/docs3-v2/java-sdk/reference-manual/protocol/triple/migration/
description: Dubbo2 协议迁移
linkTitle: Dubbo2 协议迁移
title: Dubbo2 协议迁移
type: docs
weight: 10
---
## 迁移流程说明
Dubbo2 的用户使用 dubbo 协议 + 自定义序列化,如 hessian2 完成远程调用。
Grpc 的默认仅支持 Protobuf 序列化,对于 Java 语言中的多参数以及方法重载也无法支持。
Dubbo3 的之初就有一条目标是完美兼容 Dubbo2,所以为了 Dubbo2 能够平滑升级, Dubbo 框架侧做了很多工作来保证升级的无感,目前默认的序列化和 Dubbo2 保持一致为 `hessian2`
所以,如果决定要升级到 Dubbo3 `Triple` 协议,只需要修改配置中的协议名称为 `tri` (注意: 不是 triple )即可。
接下来我们以一个使用 Dubbo2 协议的[工程](https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration)来举例,如何一步一步安全的升级。
1. 仅使用 `dubbo` 协议启动 `provider` `consumer`,并完成调用。
2. 仅使用 `tri` 协议启动 `provider` `consumer`,并完成调用。
3. 使用 `dubbo` 协议和 `tri` 协议 启动 `provider`,以 `dubbo` 协议启动 `consumer`,并完成调用。
### 定义服务
1. 定义接口
```java
public interface IWrapperGreeter {
//...
/**
* 这是一个普通接口,没有使用 pb 序列化
*/
String sayHello(String request);
}
```
2. 实现类示例
```java
public class IGreeter2Impl implements IWrapperGreeter {
@Override
public String sayHello(String request) {
return "hello," + request;
}
}
```
### 仅使用 dubbo 协议
为保证兼容性,我们先将部分 provider 升级到 `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`](https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationDubboConsumer.java) 完成调用。
{{% alert title="输出结果" color="info" %}}
![result](/imgs/v3/migration/tri/dubbo3-tri-migration-dubbo-dubbo-result.png)
{{% /alert %}}
### 仅使用 triple 协议
当所有的 consumer 都升级至支持 `Triple` 协议的版本后,provider 可切换至仅使用 `Triple` 协议启动
结构如图所示:
![strust](/imgs/v3/migration/tri/migrate-only-tri-strust.png)
[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) 完成调用。
{{% alert title="输出结果" color="info" %}}
![result](/imgs/v3/migration/tri/dubbo3-tri-migration-tri-tri-result.png)
{{% /alert %}}
### 同时使用 dubbo 和 triple 协议
对于线上服务的升级,不可能一蹴而就同时完成 provider consumer 升级, 需要按步操作,
**第一步:保证业务稳定。**
**第二步:provider 提供双协议的方式同时支持 dubbo + tri 两种协议的客户端。**
结构如图所示:
![strust](/imgs/v3/migration/tri/migrate-dubbo-tri-strust.png)
> 按照推荐升级步骤,provider 已经支持了 tri 协议,所以 dubbo3 consumer 可以直接使用 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) 完成调用。
{{% alert title="输出结果" color="info" %}}
![result](/imgs/v3/migration/tri/dubbo3-tri-migration-both-dubbo-tri-result.png)
{{% /alert %}}