2

さまざまなトピックのメッセージをプログラムで公開するにはどうすればよいですか?

<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 パブリッシュ & サブスクライブ を複数のトピックに試しましたが、構成できませんでした。

but がMqttPahoMessageHandlerAdapterあるものも試してみました。publish()protected

org.eclipse.paho.client.mqttv3.MqttAsyncClientと一緒に行くのorg.eclipse.paho.client.mqttv3.MqttCallbackはとても簡単です。でも、ずっと春のままでいたい。

誰かが私を正しい方向に向けることができれば感謝します.

4

2 に答える 2

2

とにかく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>

sendMessageExecutorChannel並行出版を実現することができます。

アップデート

refmethodonを使用して、同様の Java コードで同じ反復およびメッセージ エンリッチメント ロジックを実現できます<splitter>。もちろん、 SpEL を使用してもそれを行うことができますが、 を使用すると少し複雑に見えますCollection Projection

于 2015-05-09T07:42:01.660 に答える
2

<publish-subscribe-channel id="toMqtt" />;を宣言します。channel各送信チャネル アダプターの属性として設定します。メッセージは各アダプタに送信されます。

于 2015-05-09T07:42:56.030 に答える