バイ Ponlakshmi
出版社が購読していないものの対象にメッセージを公開するとき、メッセージは単に によって捨てられるMQTTブローカーお問い合わせ 保持されたメッセージフラグを設定することにより、発行者はブローカーにその最後のメッセージを維持するように通知することができます トピック。 この機能 1つのメッセージを1枚ずつ保存できます。MQTTの特長 トピックそして、すべての現在のおよび将来の加入者にそれを送って下さい。 保持メッセージを保存するには、 ブローカーに公開する際に、保持されたフラグを設定するだけです。 その時点で、メッセージが届きます。 すべての現在の加入者として 通常、そのトピックを購読する将来のデバイスと同様に。 この投稿では、 この機能の概要と 例で説明します。 これから見ていきましょう。
フレーズが保持されたメッセージを聞くと、保存されたメッセージがすぐに考えられます。 お問い合わせMQTTの特長メッセージの保持 で定義されるMQTT 3.1.1の特長 仕様によって作成される 「True」に設定されたフラグでメッセージを公開します。 ブローカー 最近保持されたメッセージだけでなく、MQTTのQoSそのトピックについて。 MQTT v3.1.1 と比較すると、Retain が サブスクリプションオプションのフィールドを処理し、保持された送信するかどうかのより詳細な分割を行います メッセージのとき サブスクリプションは、MQTTのv5.0お問い合わせ 以前に述べたように、現在購読しているクライアントに保持されたメッセージが配信されます。 通常のメッセージと同じ方法で、購読する新しいクライアントに自動的に送信されます。 そのトピックに。 1つだけ 保持されたメッセージは、トピックごとに保存できます。保持されたメッセージは、既存の保持されたメッセージを置き換えます。 メッセージ。
この例では、センサーは、ブローカーの現在の値を真の保持メッセージとともに送信します。 お問い合わせ メッセージはすぐにあります 受け取られたMQTTクライアント誰がオンラインです。 ブローカーはメッセージを保存し、それが来ると2番目のクライアントにそれを配信します 保持されたフラグがtrueに設定されているので、オンラインで。 この機能の結果として、オフラインクライアントが来るとき オンライン、それは更新されます 最近のセンサー値で。
クライアントがトピックを購読した後、MQTT はメッセージがクライアントに送信されます。 あなたが公開することができます 設定メッセージと 保持されたメッセージを受信するためにトピックを購読するすべてのクライアントが必要な場合は、保持フラグが設定されます 直後には サブスクリプション。 新規設定メッセージが公開されると、クライアントのサブスクライブがアップデートを受け取る 設定も同様です。
デバイスは、現在のステートメッセージにRETAINフラグを設定することでメッセージを保存できます。 アプリケーションの場合 接続または再接続、 これらは、このトピックを購読し、すぐに最新の報告された状態を受け取ることができます。 待つことは避けることができます デバイスの次のメッセージでは、この方法で現在の状態を確認します。
以下のセクションでMQTT保持メッセージ機能を設定および削除する方法について説明します。
保持メッセージは、保持されたフラグが有効になっている標準の MQTT 公開メッセージです。 出版社のとき ブローカーにデータを送信します。 また、トピックとメッセージに加えて、追加の情報も送信します。 ザ・オブ・ザ・PUBLISHパケットお問い合わせ このパケットの名前。 固定ヘッダーにフィールドをこのパケットに提供し、保持を設定する 1 つまたは 0 にフラグを付けます。 デフォルトでは0に設定され、メッセージが保存されないことを示します。 ただし、1に設定した場合 お問い合わせMQTTブローカーメッセージと対応するメッセージを保存します。サービスレベルの品質そのトピックのために、パケットを受信したときに。
特定のトピックの保持機能を無効にする方法を把握できますか? 送信と同じくらい簡単です 保持メッセージ デフォルト条件として 0 に設定されるフラグ。 同じトピックに空のメッセージを残しておく 1 に設定されたフラグは 1 に設定されています。 それをする正しい方法。 はい、これは直観的にカウンターに見えるかもしれませんが、それを避けるために行われました いつでもリアルタイムで競合 保持フラグが1に設定されていない同じトピックで公開します。
MQTT は、オブジェクトの最新の状態を維持するのに役立つメッセージ機能を保持しました。 特に有用な場合 状態は頻繁に変更しません。 サービス設定の品質は、メッセージに影響を与えません 保持されます。
プロトコルの詳細については、