MQTT客户端从RTI DDS发布者订阅数据

时间:2018-07-13 09:14:21

标签: mqtt iot publisher subscriber data-distribution-service

是否可以使Mosquito Mqtt和RTI DDS互相交谈?

我希望我的Mqtt订阅者从DDS发布者订阅数据,反之亦然。

2 个答案:

答案 0 :(得分:0)

不,您将必须编写自己的桥

答案 1 :(得分:0)

我将我的评论从hardilib的回复转移到自己的答案中,而不是将其隐藏在评论中。

  • 您有一个MQTT队列,其中包含发布者和订阅者。
  • 您有一个DDS主题,其中包含DataWriters和DataReaders。

为了使“ DDS DataWriter与MQTT订阅者对话”或“ MQTT发布者与DDS DataReaders对话”,您需要实现一个桥接应用程序:

1)订阅MQTT消息队列(或DDS主题)。

2)将数据从MQTT消息对象(或DDS样本)转换(“格式转换”)到DDS样本(或MQTT消息对象)。

3)使用已配置的DDS DataWriter实例将数据写入DDS主题(或将数据写入MQTT消息队列)。

如果两个基础结构有效地使用了相同的数据类型(在IDL中定义),则很简单。

最佳情况是,您可以实现一个类,该类具有用作消息实例(由MQTT读取器返回或由MQTT编写器编写)和DDS Type示例实例(该消息实例)的所有必需方法。可以同时被DataWriter或DataReader接受)。在这种情况下,您将暂挂在DataReader上,直到获得一个新样本为止,然后立即使用收到的样本调用MQTT编写器。或者,您在MQTT队列上暂存,接受传入的消息,然后立即调用DataWriter编写使用DDS DataWriter刚收到的MQTT消息。

最坏的情况是它们是完全不同的类型,在这种情况下,您需要编写一对转换方法,以理解读取的内容和需要写入的内容的结构。

现实将在中间某个地方。如果仅将MQTT类型定义为可变长度的“ ascii字符串”,则将变得更加困难,在这种情况下,您的转换方法需要能够将数据编组(序列化/反序列化)到DDS中和从DDS中分离出来。