序列化协议升级指南

无损升级序列化协议的最佳实践

在 3.1.0 版本中,Dubbo 默认支持的序列化协议增加了对 Fastjson2 的支持。一些用户可能会考虑升级现有系统中的序列化协议,但服务器和客户端版本之间的差异可能会导致客户端不支持服务器的序列化协议。在 3.2.0 版本中,Dubbo 的服务器引入了一个新的配置 `prefer-serialization`,它可以完美解决服务器端序列化升级过程中可能存在的风险。

最佳实践

序列化协议升级需要分两步完成

  • **首先,需要提升服务器的序列化协议升级,同时,需要在服务器的暴露配置中添加 `prefer-serialization` 配置。例如:升级前的序列化协议为 hessian2,升级后的序列化协议为 Fastjson2,则需要在服务器的暴露配置中添加如下所示的配置**
dubbo.provider.prefer-serialization=fastjson2,hessian2
dubbo.provider.serialization=hessian2
  • 其次,客户端需要升级到与服务器相同的版本

实现原理

dubbo 客户端序列化协议是根据服务器的注册配置(即服务器的 `serialization` 配置)选择的。在请求阶段,dubbo 会将客户端的序列化协议组装到请求头中,服务器在进行反序列化时会根据请求头判断反序列化协议。

  • **因此,如果服务器和客户端的版本不一致,客户端可能无法序列化。**为了解决这种情况,3.2.0 在序列化客户端时会优先使用 `prefer-serialization` 配置的协议。如果不支持与 `prefer-serialization` 相关的协议,则将使用 `serialization` 配置的协议。(您可以将 `serialization` 视为自下而上的配置)

上次修改时间:2023 年 1 月 2 日:增强英文文档 (#1798) (95a9f4f6c1c)