1

fusesource コードを使用して mqtt メッセージを Apollo サーバーに公開すると問題が発生します。次のようなコードでメッセージパブリッシャーを書きました

connection.publish(topic, message.getBytes(),QoS.AT_LEAST_ONCE, true);

トピックにサブスクライブするメッセージ コンシューマーも作成しました。最初にコンシューマーを開始し、次にパブリッシャーを開始した場合、コンシューマーはすべてのメッセージを正しく取得できます。ただし、最初にパブリッシャーを開始してからコンシューマーを開始すると、コンシューマーはメッセージを受信しません。また、Apollo 管理コンソールにアクセスしましたが、キューにメッセージが見つかりませんでした。(添付のスクリーンショットを参照してください)。

この問題を解決するにはどうすればよいですか? コンシューマーを常に実行することはできませんでした。パブリッシャーからのメッセージを失いたくありません。コンシューマーがオフラインの場合、ブローカー (Apollo) はすべてのメッセージを保持するべきではありませんか? はいの場合、なぜ私はそれを見ることができなかったのですか?

これはばかげた質問のように思えますが、私は MQTT にかなり慣れていないので、助けが必要です。

4

2 に答える 2

2

トピックに関連付けられたプロデューサーまたはコンシューマーがなくなると、トピックが自動削除されていると思われます。自動削除機能を無効にするには、apollo.xml の virtual_host 構成要素内に次の XML 要素を追加します。

<topic auto_delete_after="0"/>

apollo の将来のバージョンでは、保持されたメッセージAPLO-319を保持しているときにトピックを削除することは回避されます。

于 2013-04-25T13:54:34.587 に答える
0

メッセージを保持済みとしてマークしているため、これはバグのようです。ただし、トピックに関する複数の保持メッセージに関して Apollo がどのように動作するかはわかりません。メーリングリストでこれを取り上げたいと思うかもしれません.

于 2013-03-27T15:49:47.113 に答える