Volo 是字节跳动服务框架团队研发的 高性能、可扩展性强 的 Rust RPC 框架,使用了 Rust 最新的 AFIT 和 RPITIT 特性。
文章来源|CloudWeGo 开源社区
Volo 0.10.0 版本中,我们更多地关注可扩展性和易用性。
0 1
Break Change
错误处理重构
原先的错误类型存在诸如语义不清晰、可维护性不强、可扩展性不强、容易误用等问题,因此在新版中,我们重构了整个错误处理部分,极大加强了错误处理部分的语义清晰度和可维护性,并通过类型系统降低误用概率。
迁移指南
Server Handler 迁移
- 如果原先使用
anyhow::Result
,把anyhow:Result
改为volo_thrift::ServerResult
即可:
- 如果原先使用
Result<XResp, anyhow::Error>
,将anyhow::Error
改为volo_thrift::ServerError
即可:
- 如果原先使用了
Exception
的用户,需要将返回类型Result<XResp, volo_thrift::UserException<XException>>
改为Result<volo_thrift::MaybeException<XResp, XException>,volo_thrift::ServerError>
,同时将原先返回Err(UserError::UserException(exception))
的地方改为使用
Ok(MaybeException::Exception(exception))
即可:
- 如果改完之后,在返回
anyhow::Error
时出现报错,可以手动加一个.into()
。
- 如果改完之后,在
?
返回错误处出现报错,可以尝试先转换成anyhow::Error
再返回。
Service 中间件迁移
对于不感知用户错误的中间件来说,本次修改应该不带来 break change;如果有需要感知用户错误,那么只需要把原来的
volo_thrift::Error
改为
volo_thrift::ServerError/ClientError
即可。
Client 迁移
client 部分的错误从原来的
ResponseError
改为了
ClientError
,按编译器报错提示匹配新的错误 variant 即可。
IDL 管理文件 volo.yml 格式重构
新版 yml 配置的结构更加清晰,且更易于维护,并主要解决了旧版中无法支持 git 跨仓库引用的问题,具体的功能和配置参数见 config 。另外,对于 volo-cli 命令行工具,我们将之前的 idl 命令名字修改为了 repo。
config: https://www.cloudwego.io/zh/docs/volo/guide/config
迁移指南
安装 volo-cli 0.10.0 版本,并在 volo.yml 目录下执行 volo migrate 命令即可自动迁移。
默认生成的 Enum 类型修改
在新版生成代码中,默认生成的 Enum 类型修改为了 i32 wrapper 的 newtype 类型,以便于更好的向前兼容 IDL enum 字段中枚举值的修改。
迁移指南
将 enum 字段中枚举值名字修改为对应生成的名字即可,如
Foo::Bar
->
Foo::BAR
。
02
完整 Release Note
完整的 Release Note 可以参考 Volo Changelog 。
Volo Changelog:
https://github.com/cloudwego/volo/compare/volo-0.9.0...volo-0.10.0
项目地址
GitHub: https://github.com/cloudwego
官网: www.cloudwego.io