MQTTメッセージの購読

トピックに関するメッセージを受信するには、そのトピックまたは複数のトピックを購読する必要があります。

トピックを購読するには、Paho MQTTクライアントクラスのsubscribeメソッドを使用します。

上の図に示されているように、サブスクライブメッセージはSubAckメッセージによって確認されます。

購読するには提供する必要があります

  1. QOS -0,1,2

  2. トピックまたはトピック

あなたは一つの関数呼び出しで複数のトピックを購読できることに注意してください。

MQTT v5を使用する際には、サブスクライブプロパティも送信できます。

再び、publishメッセージと同様に、SubAckメッセージを受け取るためにはpacketreceiveイベントをリッスンする必要があります。

購読 API

まずクライアントオブジェクトを作成し、次に以下のようにsubscribeメソッドを呼び出します:

client.subscribe(topic/topic array/topic object, [options], [callback])

単一のトピックとトピックの配列、そしてトピックオブジェクトを渡すことができます。

選択肢は次のとおりです

  1. QOS -0,1,2

  2. トピックまたはトピックス

  3. ローカルなし - MQTT v5

  4. 公開時のまま保持 - MQTT v5

  5. 取り扱い維持 - MQTT v5

  6. プロパティ - MQTT v5

コールバック関数は以下の形式をしています:

関数 (err, granted)

どこで:

  • サブスクリプションエラー、またはクライアントが切断する際に発生するエラー

  • 付与されるのは{topic, qos}の配列です

  • トピックは購読されたトピックです

  • qosはそれに与えられたQoSレベルです

イベント

サブアックをキャプチャするには、以下に示すようにpacketreceiveイベントをリッスンする必要があります

これが私たちが見るものです:

タイミング

ノード.jsは非同期関数を使用しているため、タイミングに注意する必要があります。

例えばそのプロセス

  1. 接続する

  2. 登録する

接続が完了する前に購読が行われるため、機能しない可能性があります。他の言語では、次のように接続が完了するのを単に待ちます:

  1. 接続する

  2. 接続を待つ

  3. 公開

しかし、Node.jsではこれを行うことはできません。

接続が確立されるかテストしてから購読する場合:

その場合、ほぼ確実に機能していないでしょう。接続が確立されていない可能性が高いです。

したがって、ほとんど常にon_connectコールバックでサブスクライブします。

この方法なら、購読する前に接続されていることがわかり、接続が切れた場合は購読が更新されます。

購読例

シングルトピックに登録する

複数のトピックを購読する

この場合、彼らはすべて同じQOSを使用します。

トピックオブジェクトを使用して複数のトピックに登録する

この場合、使用されるQOSレベルはトピックオブジェクトにある0です。オプションで設定されたQOSは無視されます。

rh オプションを使用して購読する

このオプションは、例のように2に設定すると、ブローカーに対してサブスクライブ時に保持メッセージを送信しないように指示します。これが機能するためには、接続時にプロトコルバージョンを5に設定する必要があります。

プロパティを使用して購読する

この例では、受信メッセージのフィルタリングに使用できるサブスクリプション識別子を設定します。

ブローカーがクライアントに送信するメッセージには、サブスクリプションのトピックに一致するサブスクリプション識別子が含まれています。

この例では、購読するトピックはtesttopicで、サブスクリプション識別子は1に設定されています。

したがって、サブスクリプション識別子が1に設定されているクライアントには、testopicに公開されたメッセージが送信されます

これがクライアントが受け取るものです。ペイロードの最後にサブスクリプション識別子があることに注意してください。

Last updated