web-dev-qa-db-ja.com

MQTT Last Will Testamentの目的または使用法は何ですか?

Last Will Testamentメッセージの使用パターンを把握できないため、MQTTプロトコル全体の動作について何かが欠けています。その目的は何ですか?
よく見られる1つの例は、デバイスがオフラインになったことを通知することです。デバイスがデータを公開していない場合、デバイスがオフラインであるか、ネットワークの問題が発生している可能性があることは明らかであるため、私にはあまり意味がありません。

それでは、LWTの実際的な使用法は何ですか?それは何のために発明されたのですか?

32

LWTメッセージは、クライアントがオフラインになったかどうかの検出には実際には関係ありません(そのタスクはkeepAliveメッセージによって処理されます)。 LWTメッセージは、約クライアントがオフラインになった後に何が起こるかです。

realの最後の意志のアナロジーです。人が死んだ場合、彼女は遺言を作成でき、亡くなった後にどのような行動を取るべきかを宣言します。遺言執行者はそれらの希望に注意し、彼女に代わってそれらを実行します。 MQTTの世界での類推は、クライアントが遺言を定式化できることです。この場合、オフラインになった後、ブローカーが自分に代わって送信するメッセージを宣言します。

架空の例:

重要なデータを送信するセンサーを持っていますが、非常にまれです。最後の意志表明を[トピック: '/ node/gone-offline'、メッセージ: ':id']の形式で作成しました。:idはセンサーの一意のIDです。また、トピック「node/gone-offline」のemergency-subscriberも持っています。これにより、SMSメッセージはそのチャンネルで公開されます。

通常の操作中、センサーは、実際のセンサーの読み取り値が点在するkeepAliveメッセージを定期的に送信することにより、MQTTブローカーへの接続を開いたままにします。センサーがオフラインになると、keepAliveがないため、ブローカーへの接続がタイムアウトします。

これがLWTの出番です。LWTが指定されていない場合、ブローカーは気にせず、接続を閉じます。ただし、この場合、ブローカーはセンサーの最後の意志を実行し、LWTメッセージ「/ node/gone-offline::id」を発行します。その後、メッセージはemergency-subscriberに送信され、SMSを介してセンサーのIDが通知されるため、どうしたの。

要するに:

クライアントがオフラインになってから公開できないため、クライアントがオフラインになった後で接続を閉じるだけでなく、ブローカーがクライアントに代わって公開するメッセージを定義するためにLWTメッセージを活用できます。

67
lowi

デバイスが公開されていないからといって、デバイスがオンラインになっていない、またはネットワークに問題があるという意味ではありません。

非常にまれにしか変化しない値を監視するセンサーを例にとると、同じ値を定期的に公開することは無駄であるため、良い設計では、センサーは変更のみを公開して帯域幅の使用量を減らす必要があるとしています。値が保持値として公開されている場合、新しいサブスクライバーは常にセンサー値が変更されるのを待たずに現在の値を取得して、再度公開します。

この場合、LWTはセンサーが失敗した(またはネットワークの問題が発生した)ときに公開に使用されるため、クライアントのキープアライブがタイムアウトするとすぐに問題がわかります。

10
hardillb

Last-Will-and-Testamentメッセージに関する詳細な記事は、MQTT Essentialsブログ投稿シリーズで利用できます。 http://www.hivemq.com/mqtt-essentials-part-9-last-will- and-testament /

ブログ投稿を要約すると:

Last Will and Testament機能はMQTTで使用され、正常に切断されていないクライアントについて他のクライアントに通知します。

MQTTは、信頼性の低いネットワークが非常に一般的であるシナリオでよく使用されます。したがって、一部のクライアントは、接続が失われたり、バッテリーが空になったり、その他の考えられるケースが発生したりして、時々不自然に切断されることが想定されています。接続されたクライアントが正常に切断されたかどうかを知るのは良いことです(つまり、MQTT[〜#〜] disconnect [〜#〜]メッセージで)適切な行動を取るために.

8