0

MQTT ブローカーからメッセージをポーリングするソリューションを探しています。ここで簡単に解決策を説明します。

特定の車両関連の診断データを処理するために REST API を公開する Spring ベースの Controller クラスがあります。これらの API の 1 つNotify3P()を使用して、MQTT Java クライアントを作成し、入力データに基づいて特定のトピックの MQTT ブローカーにメッセージを発行します。私の要件は、クライアントが MQTT でメッセージを発行するたびにサードパーティ システムに通知することです。

3P システムは、通知を受信すると MQTT からメッセージを受け取ります。次に、REST API を介して MQTT ブローカーからメッセージを取得するgetMessage()必要があります (上記のコントローラー クラスで公開する必要があります)。API は、getMessage()既に公開されているメッセージを MQTT にポーリングし、それを 3P システムに渡す必要があります。次に、3P システムは何らかの処理を行いpostMessage()、コントローラー クラスで公開されている別の REST API を介してシステムに応答を返します。は、MQTTpostMessage()のトピックに関するメッセージを投稿する必要があります。MQTTのトピックをポーリングし、クライアントに応答を返すresponse別の REST API が必要です。checkResponse()response

requestこれまでに行ったこと: アプリケーションの起動時に、MQTTとresponseトピックをリッスンするスタートアップ Bean があります。requestここで、REST API を使用してトピックにデータを公開しますNotify3P()。メッセージを取得するスタートアップ Bean にコールバックをアタッチしました。問題は、3P がコントローラーを呼び出して MQTT からメッセージをポーリングする必要がある場合です。

MQTT でメッセージを保持し、オンデマンドで消費する方法が明確ではありません。MQTT でそれを行うメカニズムはありますか? また、3P システムがメッセージを投稿responseしたら、トピックをポーリングしresponseて MQTT からの応答を取得し、コントローラーのクライアントに送信するにはどうすればよいですか?

問題の説明が理にかなっていることを願っています。誰かからの解決策がある場合は、投稿してください。サンプルコードは非常に役立ちます。

前もって感謝します!!

4

1 に答える 1

0

MQTT の概念が少し混乱しているかもしれません。重要なポイントの 1 つは、ポーリングがないことです。

トピックをサブスクライブし、responseトピックに発行しrequestます。応答が利用可能になるとすぐに、ブローカーから送信されます。メッセージを控えることはできません。

コントローラーも MQTT と通信する必要があるようです。最初からトピックにサブスクライブされている場合はresponse、メッセージを受信し、ポーリングの必要なしに、メッセージを処理できます。

サードパーティがMQTTからメッセージを読み取るようにコントローラーに通知する場合、目的を正確に達成するには、コントローラーはとにかくMQTTを使用できる必要があります。その時点で、「適切に」行うこともできます。MQTT をコントローラーに統合したくない場合は、説明したことを行うことができず、2 つのコンポーネント間で通信する別の手段を考え出す必要があります。

まとめ - 可能であれば、コントローラーに MQTT と通信させます。

于 2013-11-01T08:42:11.473 に答える