SpringXD 接收 MQTT 并发布到不同主题的 MQTT
SpringXD receive MQTT and publish to MQTT on different topic
我目前正在开发我的第一个 SpringXD Stream。它应该接收关于 MQTT 主题的消息,对服务执行 HTTP POST 并将此结果发布到另一个 MQTT 主题。
目前我无法发布到与初始主题不同的 MQTT 主题。
这是我的直播:
stream create test --definition "in:mqtt --url='tcp://hivemq:1883' --topics='+/+/+/my/downlink' --username='test' --password='test' --clientId='client_downlink'
| header-enricher --headers={\"mqtt_topic\":\"headers['mqtt_topic'].replace('/downlink', '/uplink')\"}
| out:mqtt --url='tcp://hivemq:1883' --username='test' --password='test' --clientId='client_uplink'" --deploy
方法是在发布 header 'mqtt_topic' 中将“/downlink”替换为“/uplink”,但 header-enricher 不会覆盖现有的 header 值, 因此发布的主题与我们收到的消息相同。
知道如何实现吗?
我正在对此进行改进。同时,您可以编辑 header-enricher groovy 脚本 modules/processor/header-enricher/config/header-enricher.groovy
并进行以下更改:
si.'header'(name:k,expression:v,overwrite:true)
我目前正在开发我的第一个 SpringXD Stream。它应该接收关于 MQTT 主题的消息,对服务执行 HTTP POST 并将此结果发布到另一个 MQTT 主题。
目前我无法发布到与初始主题不同的 MQTT 主题。
这是我的直播:
stream create test --definition "in:mqtt --url='tcp://hivemq:1883' --topics='+/+/+/my/downlink' --username='test' --password='test' --clientId='client_downlink'
| header-enricher --headers={\"mqtt_topic\":\"headers['mqtt_topic'].replace('/downlink', '/uplink')\"}
| out:mqtt --url='tcp://hivemq:1883' --username='test' --password='test' --clientId='client_uplink'" --deploy
方法是在发布 header 'mqtt_topic' 中将“/downlink”替换为“/uplink”,但 header-enricher 不会覆盖现有的 header 值, 因此发布的主题与我们收到的消息相同。
知道如何实现吗?
我正在对此进行改进。同时,您可以编辑 header-enricher groovy 脚本 modules/processor/header-enricher/config/header-enricher.groovy
并进行以下更改:
si.'header'(name:k,expression:v,overwrite:true)