[英]Spring Mqtt - Publish messages to multiple topics programmatically
如何以編程方式發布具有不同主題的消息?
<mqtt:outbound-channel-adapter id="mqttOut"
auto-startup="true"
client-id="foo"
url="tcp://localhost:1883"
client-factory="clientFactory"
default-qos="0"
default-retained="false"
default-topic="bar"
async="true"
async-events="true" />
我嘗試了Spring集成MQTT的發布和訂閱多個主題 ,但是無法配置。
還嘗試過具有publish()
但protected
MqttPahoMessageHandlerAdapter
。
使用org.eclipse.paho.client.mqttv3.MqttAsyncClient
和org.eclipse.paho.client.mqttv3.MqttCallback
非常容易。 但是我要一直堅持春天。
欣賞是否有人可以指出我正確的方向。
無論如何,您都可以使用Spring Integration做到這一點! 有了很多EIP組件實現和板載Spring功能(注入,SpEL等),再加上一點想像力,即使沒有任何Java代碼,我們也可以滿足任何最終應用程序要求。
因此, <mqtt:outbound-channel-adapter>
允許在運行時確定topic
。 而不是default-topic
您應該提供MqttHeaders.TOPIC
MessageHeader
。
因此,如果您需要將同一條消息發送到多個主題,則只需為每個主題構建該消息的副本。 <splitter>
可以幫助我們:
<int:splitter input-channel="enricheMessage" output-channel="sendMessage" apply-sequence="false">
<int-groovy:script>
['topic1', 'topic2', 'topic3'].collect {
org.springframework.integration.support.MessageBuilder.withPayload(payload)
.copyHeaders(headers)
.setHeader(org.springframework.integration.mqtt.support.MqttHeaders.TOPIC, it)
.build()
}
</int-groovy:script>
</int:splitter>
sendMessage
可以通過ExecutorChannel
實現並行發布。
UPDATE
您可以使用<splitter>
上的ref
和method
使用相似的Java代碼實現相同的迭代和消息豐富邏輯。 當然,即使使用SpEL也可以做到這一點,但是使用Collection Projection
看起來會有些復雜。
聲明<publish-subscribe-channel id="toMqtt" />
; 將其設置為每個出站通道適配器上的channel
屬性; 該消息將發送到每個適配器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.