OMG 规范DDS 的可扩展和动态主题类型(或简称 DDS-XTypes)解决了您的问题。从该规范中引用:
类型系统支持类型演化,因此可以如上所述“演化类型”并保持使用不同版本类型的组件之间的互操作性
目前并非所有 DDS 实现都支持 XType,因此您可能不得不求助于不同的解决方案。例如,您可以在主题名称中包含版本编号方案,以避免不同组件之间的键入冲突。为了确保每个组件都接收到所需的正确数据,您可以创建一个服务,负责根据需要在不同版本的主题之间进行转发。该服务必须了解不同版本的主题,并且应该注意填充默认值和/或在它们的不同类型之间进行转换。这是否是一个可行的解决方案取决于您的系统要求。
如果只是为了解决类型演化问题,不建议在 DDS 中使用不同的类型系统,如 Protocol Buffers。本质上,您将 PB 消息作为对 DDS 中间件不透明的数据进行传输。这意味着您还将失去一些不错的工具功能,例如动态发现和类型显示,因为 DDS 中间件不理解 PB 消息。此外,您的应用程序将变得更加复杂,因为它们将负责调用正确的 PB 反序列化方法。让 DDS 处理所有这些更容易。
无论您采取哪种方式,都建议您严格管理数据模型的演变。如果您让任何人根据自己的喜好添加或删除某些属性,那么情况将变得难以快速维护。