簡體   English   中英

Spring Mqtt-以編程方式將消息發布到多個主題

[英]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.MqttAsyncClientorg.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>上的refmethod使用相似的Java代碼實現相同的迭代和消息豐富邏輯。 當然,即使使用SpEL也可以做到這一點,但是使用Collection Projection看起來會有些復雜。

聲明<publish-subscribe-channel id="toMqtt" /> ; 將其設置為每個出站通道適配器上的channel屬性; 該消息將發送到每個適配器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM