Fubo Docs
  • 概要
    • MQTT: IoTメッセージングの標準
    • MQTT 仕様
    • 初心者ガイド
  • チュートリアル
    • Node.js MQTT クライアントガイド
    • MQTTブローカーに接続する
    • MQTTメッセージの公開
    • MQTTメッセージの購読
    • 受信メッセージ
  • 高度なトピック
    • セッションとQoS
    • MQTT セキュリティメカニズム
    • MQTT 保持メッセージ
Powered by GitBook
On this page
  • MQTT 保持メッセージの例の概要
  • QOS 設定と保持メッセージと保持メッセージの削除
  • ソーステキスト: Pythonコード 翻訳テキスト:
  • 検出された保持メッセージ
  • 台本
  • 一般的な質問と回答
  • いつ保持メッセージを使用するか
  • 保持メッセージをデータストアとして使用する
  • 保持メッセージ形式の提案
  • 要約
  1. 高度なトピック

MQTT 保持メッセージ

通常、出版者がトピックにメッセージを公開し、そのトピックに誰も登録していない場合、メッセージはブローカーによって単に破棄されます。

出版者は、保持メッセージフラグを設定することによって、そのトピックに関する最後のメッセージをブローカーに保持させるよう指示することができます。

この機能は非常に便利です。たとえば、状態が変化したときにのみその状態を公開するセンサー(例:ドアセンサー)がある場合、新しい購読者がこの状態に購読した場合はどうなるでしょうか?

保持されたメッセージがなければ、購読者はメッセージを受け取る前にステータスが変更されるのを待たなければならないでしょう。

しかし、保持されたメッセージにより、加入者はセンサーの現在の状態を確認できます。

重要なのは、トピックごとに1つのメッセージだけが保持されるということです。

そのトピックについて次に公開されるメッセージは、そのトピックの最後の保持メッセージを置き換えます。

MQTT 保持メッセージの例の概要

このチュートリアルでは、Pythonスクリプトを使用してメッセージの公開と購読を行います。

その後、さまざまなフラグとQOS 設定で保持メッセージがどのように機能するかを調査します。

重要な点は、クライアントが購読する前にメッセージを公開することです。

混乱を避けるために、クリーンなセッションを使用していることもご留意ください。

クリーンセッションを使用しない場合、保存されているが保持されていないメッセージが表示されることがあります!

基本的なプロセスは次のとおりです:

  1. トピックにメッセージを公開し、保持メッセージフラグを設定しないでください

  2. トピックに関するメッセージを購読する

  3. メッセージを監視し、結果を分析する

私たちは複数のメッセージを公開する方法と、保持されたメッセージを削除または削除する方法についても見ていきます。

以下のスクリーンショットを参照してください:

例 1 - メッセージ保持フラグが設定されておらず、新しいサブスクライバーはメッセージを受け取りません。つまり、メッセージは受信されません。

例 2 - メッセージフラグを保持し、新しいサブスクライバーは受信したメッセージに示される最後のメッセージを受け取ります。

例 3 - メッセージフラグを保持し、いくつかのメッセージOFF、OFF2、OFF3を公開します。しかし、新しいサブスクライバーは最後のメッセージOFF3のみを受け取ります。

QOS 設定と保持メッセージと保持メッセージの削除

以下のスクリーンショットは、QOS 効果を示すための4つの接続例を示しており、その後で保持メッセージを削除する方法を説明しています。

例 1:QOSを0に設定して、QOS 設定が効果があるかどうかを確認します。保持されたメッセージがまだ受信されており、公開されたメッセージのQOSには影響がないことがわかります。

例 2:保持されたメッセージを保持メッセージフラグをFalseに設定して削除しようとします。しかし、メッセージがまだ保持されていることに気づきます。

例 3:メッセージを空白に設定しますが、保持メッセージフラグはFalseのままにします。再び、メッセージは保持されます。

例 4:最後にメッセージを空白に設定し、保持フラグを true に設定して、保持されたメッセージをクリアします。

以下の表は、QOS、クリーンセッションフラグ、および保持メッセージフラグがトピックの新しいサブスクライバーによって受信されるメッセージにどのように影響するかを示す要約です。

注意:retainフラグの扱い方の一部は、ブローカーの実装に依存します。

ソーステキスト: Pythonコード 翻訳テキスト:

公開するためのコードで、保持フラグが設定されています:

client.publish(“bulb1”,”test message “,qos=0,retain=True)

どこで:

topic=bulb
nessage =test mesage
QOS=0
Reatained message Flag=True

検出された保持メッセージ

トピックを購読すると、保持されているメッセージがある場合、そのメッセージはクライアントに配信されます。

クライアントは、以下のコードスニペットに示されているように、on messageコールバックのmessage.retainフラグを調つことで、それが保持メッセージであることを検出できます。

def on_message(client, userdata, message):
    print("message received  ",str(message.payload.decode("utf-8")),\
          "topic",message.topic,"retained ",message.retain)
    if message.retain==1:
        print("This is a retained message")

台本

私は、一連のトピックに保持されているメッセージをクリアし、保持メッセージがあるトピックについて報告するPythonスクリプトを作成しました。

ダウンロード

一般的な質問と回答

Q: 保持されたメッセージを削除するにはどうすればいいですか? Translation Text:

  • A: 保持フラグをtrueに設定して空のメッセージを公開し、保持されたメッセージをクリアします。

Q: メッセージのQOSは保持されたメッセージに影響を与えますか?

  • A: いいえ、違います。

Q: メッセージが保持されているかどうかはどうすればわかりますか? Translation Text:

  • A: トピックを購読して、保持フラグを調べるときにのみわかります。

  • 質問: トピックを購読して保持メッセージを受け取った場合、ブローカー/サーバーはそのメッセージを削除しますか?

  • A: いいえ、保持され、新しいクライアントが登録するときに設定されます。

  • Q: Fuboで保持されているメッセージをすべて削除またはクリアするにはどうすればいいですか?

  • A:永続データベースを使用していない場合、もっとも簡単な方法は、mosquittoを停止して再起動することです。それ以外の場合は、すべてのトピックを購読して保持メッセージを確認およびクリアする必要があります。これには私のPythonスクリプトを使用できます。ただし、これは忙しいブローカーではお勧めできません。

いつ保持メッセージを使用するか

通常、メッセージに永続的なデータが含まれている場合、保持フラグが設定されたメッセージを公開します。

たとえば、センサーはファームウェアのバージョン番号、IPアドレス、現在の状態など、自身に関する情報を公開することができます。

この情報は変更される可能性が低いため、retainフラグを使用して一度だけ公開する必要があります。そうすれば、新しいクライアントはその情報を取得できます。

保持メッセージをデータストアとして使用する

私は、保持されたメッセージがデータストアとして使用されているアプリケーションを見たことがあります。

もし私のホームアシスタントとMQTTに関するチュートリアルを見ていただければ、その動作を確認できます。

可能であることは認識していますが、例えば誰かがクリーンアップの一環として保持されているメッセージを削除した場合の結果を考慮する必要があります。

保持メッセージ形式の提案

保持されたメッセージがセミ永続的/永続的なデータストアとして使用されているため、実際のメッセージペイロードと一環して追加情報を公開することが私の意見では有用です。

最低限、タイムスタンプと削除許可フラグを公開する必要があります。そうすれば私たちは

{"payload":payload,"timestamp":timestamp,"delete_allowed":True/False}

削除ユーティリティはこれらをチェックし、非常に古いメッセージを削除することができますが、削除してはならないメッセージは削除しません。

要約

保持メッセージ機能は、オブジェクトの最後の状態を保持するための便利な機能であり、状態が頻繁に変わらない場合に特に便利です。

サービス品質の設定は保持メッセージに影響しません。

PreviousMQTT セキュリティメカニズム

Last updated 12 months ago