来自任意mqtt主题(例如“基础/上下文/限定词/子主题”)的事件如何折叠到Hono MQTT适配器主题结构中?您是否只是将事件发布到主题:“事件”并使用消息正文来设置原始主题的上下文?
答案 0 :(得分:2)
有几个可用的选项。
如果设备/客户端将发布到的主题是可配置的,则您有以下两个选择:
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。
如果无法在设备上配置主题,则仍可以实现自己的自定义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主题选项,例如
,但在所有情况下,AMQP应用程序属性均设置为orig_address -> t
另外可以看到messageAnnotations "resource" -> telemetry/my-tenant/org.acme:my-device-1
,但尚未包含完整主题
是否可以在不实现自定义MQTT适配器的情况下获取完整的MQTT主题路径?
使用eclipse/hono-adapter-mqtt-vertx:1.4.0