0

Spring XD のシンク MQTT ソース モジュールを使用すると、ペイロードで間違った値が取得されます。ストリームを特定のトピックにサブスクライブし、Eclipse の通常のクライアントも同じトピックにサブスクライブしています。ペイロードは、バイトの配列であると想定されています。私が受け取っているのと同じメッセージについて

xxxxx...0000073F、Spring XD の場合

xxxxx...000007F9、Eclipse Paho クライアント上

実際には、この値はカウンターであると想定されており、Eclipse paho クライアントは完全に動作しますが、Spring XD は、16 進数の数字のいずれかが F に達すると奇妙な動作をするようです。同じ理由で、カウンターまで同じ数値でスタックします。シーケンスの F を取り除くのに十分なほど増加しました。

私の質問は、Spring XD で提供される MQTT クライアントで事前処理が行われている場合、ペイロードで異なる値を取得する理由を説明することです。値を送信しているのは私自身なので、2 番目が正しいと確信しています。

ありがとう。

4

1 に答える 1

3

Spring XD は、裏で Paho クライアントを使用するSpring Integrationを使用します。

残念ながら、ペイロードを文字列 (デフォルトでは UTF-8) に変換するため、有効な UTF-8 ではないデータでこのような結果が生成されます。

アダプターは、ペイロードをバイナリーとして渡すように構成できますが、残念ながら、そのオプションは現在 XD で公開されていません。

回避策はDefaultPahoMessageConverter、オーバーライドのサブクラスを作成することmqttBytesToPayloadです...

protected Object mqttBytesToPayload(MqttMessage mqttMessage) throws Exception {
    return mqttMessage.getPayload();
}

コンバーターをモジュールのlibディレクトリー内の jar に入れ、mqtt.xml を更新してコンバーターのインスタンスをconverter属性に渡します。

バイナリをモジュールの標準オプションにするために、 JIRA の問題を開きます。

于 2014-08-10T10:04:25.760 に答える