テキストコピッド
ホーム >ニュース MQTT トピック

MQTTのトピックとその基本を知る

バイ Ponlakshmi


MQTT Topics

MQTTの特長メッセージは1つから直接送信されません 別のものに。 「MQTT トピック」に割り当てられます。 ザ・オブ・ザ・MQTTブローカーそれから配布します メッセージ 購読しているクライアント プロトコルの用語トピック 参照するUTF-8 文字列ブローカーが購読したクライアントごとにメッセージをフィルタリングするために使用されます。 誰かが購読するとき トピックは、そのトピックにメッセージを True に設定されたメッセージで公開し、トピックは 設立年月日 いつか ブローカーが切断する最後の加入者、クリーンなセッションが確立されます。クリーン セッションは True に設定されます。 MQTT クライアントが接続します。

MQTT トピックの構造

センサー/water_level/water_status– センサー、water_level、water_status トピックレベル。

フォワードスラッシュ(/)- トピックレベルの分離器。

トピックレベルの分離器

トピックは1つ以上のトピックレベルで構成されています。 フォワードスラッシュは各トピックレベル(トピックレベル)を分離します 分離器)。 ブローカーは、事前登録されるトピックを必要としません。


MQTTのトピックは、メッセージキューと比較して非常に軽量です。 出版またはサブスクライブ前に トピック, クライアントはトピックを作成する必要はありません。 事前の初期化がなければ、ブローカーは有効に受け入れます トピック。

いくつかの例を見てみましょう:

Topics

で使用されるMQTTのトピックを見るふりがな ブローカーお問い合わせ

トピックのセマンティックおよび使用法

UTF-8エンコードされた文字列の長さを除き、レベル数に制限はありません。 トピック名またはトピックフィルタ。 トピック名とトピックフィルタは次のガイドラインに従います。


  • 各トピックには少なくとも1文字とトピック文字列が含まれている必要があることに注意することが重要です。 空きスペースを空にすることができます。
  • トピック名やトピックフィルタでは null 文字を使用できません。
  • これらのトピックは、ケースの敏感です
  • たとえば、センサー/温度、センサー/温度は2つの異なるトピックです。

トピックワイルド カード

サブスクリプションのトピックフィルタ複数のトピックを一度に購読できるように、特別なワイルドカード文字を含むことができます。 ザ・オブ・ザ・ ワイルドカード文字は、 トピック フィルターで使用されるが、トピック名では使用されていません。 ワイルドカードは2種類に分類されます。


  • シングルレベルのワイルドカードと
  • マルチレベルのワイルドカード。

2つのワイルドカード文字の1つが、クライアントのサブスクライブで与えられたトプティックフィルタで遭遇する場合、 トピックレベルの使用 分離器は重要です。 トピックレベルのセパレータは、トピックフィルタまたはトピックのどこにでも存在できます お名前. ゼロ長さのトピック レベルは、隣接するトピックレベルの分離器によって示されます。

シングルレベルのワイルドカード

トピックのシングルレベルのワイルドカード文字はプラス記号「+」で表されます。 トピックフィルタの シングルレベルのワイルドカードは、 最初および最後を含むあらゆるレベルで使用される。 フィルタの全レベルを埋める必要があります。 利用する それはある場合もあります 複数のレベルとマルチレベルのワイルドカードと組み合わせて、トプティックフィルタで使用されます。

例えば、


  • 「+」
  • 「tank/+/water_level」 – これは、シングルレベルのワイルドカードで有効なトピックです。

"tank/water_level/+" のようなトピックは "tank/water_level/flow_rate1" と一致します。 "tank/water_level/flow_rate2" ではなく、 "tank/water_level/flow_rate1/increase" がリリースされました。 また、シングルレベルのワイルドカードが1つのレベルだけマッチするので、 「tank/+」は、 「tank」と「tank/」と一致します。

マルチレベルのワイルドカード

ワイルドカード文字「#」は、任意のレベルに一致させるために使用できるマルチレベルのワイルドカードです。 トピック。 親と子レベルの任意の数は、マルチレベルのワイルドカードによって表されます。 マルチレベル ワイルドカード文字 トピックレベルの区切り文字だけまたは後のいずれかを指定する必要があります。 与えられた最後の文字でなければなりません トピックフィルタ いずれかのシナリオ。

例えば、


  • 「tank/water_level/#」は、マルチレベルワイルドカードで有効なトピックです。

クライアントが「tank/water_level/flow_rate1/#」を購読している場合、公開されたメッセージが表示されます。 以下 次のトピック名:

  • タンク/water_level/flow_rate1
  • "tank/water_level/flow_rate1/increasing" は、
  • "tank/water_level/flow_rate1/increasing/decreasing" は、

サイトマップ

ドルで始まるトピック サインイン ($)お問い合わせ $-symbol トピックは、ブローカーの内部統計です。 トピックフィルタ ワイルドカードで始まります 文字 (# または +) は、$ 文字で始まるトピック名と一致してはなりません。 クライアントは、 送信可能 サーバーによると、このようなトピック名を持つ他のクライアントへのメッセージ。 トピック 開始する名前 主要な $ 文字は可能性があります サーバーの実装により、追加の目的に使用されます。 $SYS/は、トピックの重要なプレフィックスになりました サーバ固有のものを含む データまたは制御 API。 主要な $ 文字を含むトピックは、アプリケーションのアプリケーションで使用できません 自身の理由。


以下の情報は、通常$SYS/で保存されますが、ブローカーの実装は異なります。 以下にいくつかの例を示します。


  • "#" を購読すると、$ で始まるトピックで公開されたメッセージは受信されません。
  • 「$SYS/broker/Clients」に送信されたメッセージは、サブスクリプションから受け取ることはありません。 「+/ブローカー/クライアント」
  • 「$SYS/#」に登録すると「$SYS/」で開始する件名に公開されたメッセージが届きます。
  • 「$SYS/monitor/Clients」に送信されたメッセージは、「$SYS/broker/+」に登録すると受信されます。
  • クライアントは「#」と「$SYS/#」の両方を購読して、開始するトピックからメッセージを受け取る必要があります。 $SYS/および対象者 $ では起動しません。

上記は、メッセージのトピックの基本です。 MQTTのトピックは、あなたが見ることができるように、動的であり、たくさんのものを提供 柔軟性。 トピック全体の階層を変更することなく、その拡張性を使用し続ける 新しいセンサーによる これらをトピックツリーに追加します。

プロトコルの詳細については、