我参与了一个项目,该项目使用 DDS 作为协议(protocol)进行通讯,并使用 C++ 作为语言。如您所知,交换的消息称为主题。好吧,有时团队必须更改主题定义,其结果是,其他依赖于该主题的软件将停止工作,因此有必要在任何地方更新主题并重新编译。所以,我的问题是,您知道如何不破坏向后兼容性吗?我一直在搜索,我已经找到了谷歌 Protocol Buffer ,他们这样说:



还有其他想法吗?

提前致谢。

最佳答案

OMG规范Extensible and Dynamic Topic Types for DDS(或简称DDS-XTypes)解决了您的问题。从该规范中引用:



当前,并不是所有的DDS实现都支持XType,因此您可能不得不求助于其他解决方案。例如,您可以在主题名称中包括一个版本编号方案,以避免在不同组件之间键入冲突。为了确保每个组件都能收到所需的正确数据,您可以创建一个服务,该服务负责根据需要在主题的不同版本之间进行转发。该服务必须了解主题的不同版本,并应注意填充默认值和/或在它们的不同类型之间进行转换。除其他外,这是否可行还取决于您的系统要求。

如果仅出于解决类型演变问题的目的,则不建议在DDS中使用其他类型的系统,例如 Protocol Buffer 。本质上,您将PB消息作为不透明的数据传输到DDS中间件。这意味着您还将失去一些不错的工具功能,例如动态发现和类型显示,因为DDS中间件无法理解PB消息。而且,您的应用程序将变得更加复杂,因为它们将负责调用正确的PB去/串行化方法。让DDS轻松处理所有这一切。

无论采用哪种方法,建议您都严格管理数据模型的演变。如果只允许任何人根据自己的喜好添加或删除某些属性,这种情况将变得难以快速维护。

关于c++ - 不要破坏DDS系统中的向后兼容消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33719014/

10-10 16:54