Eclipse Hono MQTT适配器:MQTT主题映射

时间:2019-01-15 19:37:38

标签: eclipse-hono

来自任意mqtt主题(例如“基础/上下文/限定词/子主题”)的事件如何折叠到Hono MQTT适配器主题结构中?您是否只是将事件发布到主题:“事件”并使用消息正文来设置原始主题的上下文?

2 个答案:

答案 0 :(得分:2)

有几个可用的选项。

  1. 如果设备/客户端将发布到的主题是可配置的,则您有以下两个选择:

    1.1。发布到主题e(或仅发布event/${tenant-id}/${device-id}/${custom-path},以节省每条消息几个字节),并将所有相关上下文信息包括在消息有效负载中,以便使用者可以从有效负载中确定消息的用途。

    1.2。发布到看起来像${tenant-id}的主题,其中${device-id}是该设备所属的承租人的标识符,而${custom-path}是该设备的标识符。 event/${tenant-id}可以是您选择的任意路径段。 MQTT适配器将在其 address 属性设置为org.eclipse.hono.adapter.mqtt.AbstractVertxBasedMqttProtocolAdapter并且包含名为 orig_address 的应用程序属性的AMQP消息中转发MQTT消息的有效负载。将包含消息最初发布到的完整主题名称。消费者然后可以使用此信息来导出上下文信息,例如消息目的。有关详细信息,请参见MQTT adapter user guide

  2. 如果无法在设备上配置主题,则仍可以实现自己的自定义MQTT适配器。这听起来比实际要难,因为org.eclipse.hono.adapter.kura.KuraProtocolAdapter基类中已经提供了所需的大多数功能,您可以从基类中派生它们,也可以仅实现主题映射逻辑。 Kura适配器正是以这种方式实现的,仅由几行代码组成。只需看看<input type="button" name="button1" class="myButton" value="Button1"/> <input type="button" name="button2" class="myButton" value="Button2"/> <input type="button" name ="button3" class="myButton" value="Button3"/> <input type="button" name ="button4" class="myButton" value="Button4"/>

答案 1 :(得分:0)

尝试使用一些MQTT主题选项,例如

  • telemetry / my-tenant / org.acme:my-device-1 / customPath
  • telemetry / my-tenant / org.acme:my-device-1 / custom / path
  • 遥测//// custom / path

,但在所有情况下,AMQP应用程序属性均设置为orig_address -> t 另外可以看到messageAnnotations "resource" -> telemetry/my-tenant/org.acme:my-device-1,但尚未包含完整主题

是否可以在不实现自定义MQTT适配器的情况下获取完整的MQTT主题路径? 使用eclipse/hono-adapter-mqtt-vertx:1.4.0