-
Notifications
You must be signed in to change notification settings - Fork 69
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
493b368
commit 110d6b1
Showing
2 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
MQTT v3.1およびv3.1.1と比較して、MQTT v5はさらに多くの新機能を提供しています。これらの機能を理解しやすい方法で紹介し、開発への影響について議論します。既に[MQTT v5の新機能](https://www.emqx.com/ja/blog/introduction-to-mqtt-5)についていくつか議論しましたが、今日は**トピックエイリアス**について引き続き説明します。 | ||
|
||
## トピックエイリアスとは | ||
|
||
トピックエイリアスを使用すると、ユーザーは長くて繰り返し使用される可能性のあるトピック名を2バイトの整数に短縮できるため、メッセージを発行する際の帯域幅消費を削減できます。 | ||
|
||
この2バイトの整数は、`PUBLISH`パケットのバリアブルヘッダー内の属性フィールドとしてエンコードされます。また、これは`CONNECT`および`CONNACK`パケット間でクライアントとブローカー間で交換される[トピックエイリアス最大値](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901051)によって制限されます。この制限が超えられない限り、任意のトピック名を1つの整数に短縮できます。 | ||
|
||
## なぜトピックエイリアスを使用するのか | ||
|
||
MQTT v3プロトコルでは、クライアントが同じトピックに大量のメッセージを(同じMQTT接続上で)発行する必要がある場合、トピック名がすべての`PUBLISH`パケットで繰り返し使用されるため、帯域幅資源の無駄遣いが発生します。同時に、同じトピック名のUTF-8文字列を毎回解析することは、サーバーの計算資源の無駄遣いとなります。 | ||
|
||
例えば、センサーが場所`A`から固定頻度で温度と湿度を報告するとします。温度メッセージごとにトピック`/location/A/temperature`(23バイト)に、湿度メッセージごとにトピック`/location/A/humidity`(20バイト)に発行します。トピックエイリアスを使用しない場合、最初に発行されたメッセージ以降、各`PUBLISH`パケットはトピック名(合計53バイト)を接続を通じて何度も送信する必要があります。また、ブローカーは場所トピックを繰り返し解析する必要があります。 | ||
|
||
このように、MQTT v5.0でトピックエイリアス機能を導入する主な目的は、ネットワークリソースとCPUリソースの両方でリソース消費を削減することです。 | ||
|
||
## トピックエイリアスの使用方法 | ||
|
||
### トピックエイリアスのライフサイクルとスコープ | ||
|
||
トピックエイリアスはクライアントとサーバーそれぞれによって管理され、ライフサイクルとスコープは現在の接続に限定されます。接続が切断された後にトピックエイリアスを再度使用する必要がある場合、`トピックエイリアス <=> トピック名`のマッピング関係を再構築する必要があります。 | ||
|
||
### トピックエイリアス最大値 | ||
|
||
MQTTクライアントやサーバーがトピックエイリアスを使用し始める前に、現在の接続で許可されるトピックエイリアスの最大数について合意する必要があります。この情報の交換は`CONNECT`パケットと`CONNACK`パケットで行われます。`Topic Alias Maximum`は`CONNECT`および`CONNACK`パケットのバリアブルヘッダー内のメッセージ属性としてエンコードされます。 | ||
|
||
![Set MQTT Topic Alias Maximum mutually](https://assets.emqx.com/images/9b49a3437044bc206b400d5b81c39204.png) | ||
|
||
<center>トピックエイリアス最大値を相互に設定</center> | ||
|
||
クライアントの`CONNECT`パケット内の`Topic Alias Maximum`は、サーバーがこの接続で使用できるトピックエイリアスの最大数を示します。同様に、サーバーが送信する`CONNACK`パケット内の値は、現在の接続で相手側(クライアント)が使用できるトピックエイリアスの最大数を示します。 | ||
|
||
トピックエイリアスは`1`から`Topic Alias Maximum`までの範囲です。相手側にトピックエイリアスの使用を禁止するには、`Topic Alias Maximum`を`0`に設定します。 | ||
|
||
### トピックエイリアスの作成と使用 | ||
|
||
クライアント(またはサーバー)が`PUBLISH`パケットを送信する際、バリアブルヘッダーの属性に`0x23`の値を持つ1バイトの識別子を使用して、次の2バイトがトピックエイリアス番号であることを示すことができます。 | ||
|
||
ただし、トピックエイリアス番号は`0`であってはならず、また、サーバー(クライアント)が送信する`CONNACK`(`CONNECT`)パケットで設定された`Topic Alias Maximum`を超えてはなりません。 | ||
|
||
トピックエイリアスと非空のトピック名を持つ`PUBLISH`パケットを受信すると、受信側はトピックエイリアスとトピック名との間にマッピング関係を確立します。その後、このマッピング関係を使用して、2バイトの長さを持つトピックエイリアスを使用してメッセージを発行することができ、受信側は以前に構築された`トピックエイリアス <=> トピック名`のマッピング関係を使用してメッセージのトピックを見つけます。 | ||
|
||
このようなマッピングはそれぞれのエンドで独立して管理されるため(すなわち、必ずしも同一である必要はありません)、クライアントとサーバーは同じエイリアス番号を使用して異なるトピックに発行することができます。 | ||
|
||
![MQTT client and broker manage their aliases respectively](https://assets.emqx.com/images/bcb4fa762372b2e96d6a9d26864242f4.png) | ||
|
||
<center>MQTTクライアントとブローカーはそれぞれエイリアスを独自に管理</center> | ||
|
||
### 未知のトピックエイリアスの使用 | ||
|
||
`PUBLISH`パケット内で使用されているトピックエイリアスが以前に作成されていない、つまり受信側が現在のトピックエイリアスとトピック名とのマッピング関係を構築していない場合、かつこのメッセージのバリアブルヘッダー内のトピック名フィールドが空の場合、受信側は`REASON_CODE`が`0x82`の`DISCONNECT`パケットを送信して接続を閉じる必要があります。 | ||
|
||
![Unknown topic alias](https://assets.emqx.com/images/e80be18ba1fe38b628e436a32782c88c.png) | ||
|
||
<center>未知のトピックエイリアス</center> | ||
|
||
### トピックエイリアスの再作成 | ||
|
||
既に構築されたエイリアスとトピック名のマッピングは、新しいトピックエイリアスと非空のトピック名を持つ新しい`PUBLISH`パケットで再構築することができます。 | ||
|
||
以下の図の例では、以前に温度トピックに使用されていたトピックエイリアス`123`が、湿度トピックを表すように更新されています。 | ||
|
||
![MQTT client and broker recreate topic aliases](https://assets.emqx.com/images/fdab5dab7d1fa257d80a6a4a9085abac.png) | ||
|
||
<center>MQTTクライアントとブローカーはトピックエイリアスを再作成</center> | ||
|
||
## 結論 | ||
|
||
MQTT v5の新機能であるトピックエイリアスは、pub-subメッセージングモデルをより柔軟に使用する方法を提供します。特に、大量に、限られたセットのトピックに対して繰り返し発行されるメッセージに対して、トピックエイリアスはネットワークリソースと計算資源の両方を効果的に節約することができます。 | ||
|
||
|
||
|
||
<section class="promotion"> | ||
<div> | ||
専門家と話します | ||
</div> | ||
<a href="https://www.emqx.com/ja/contact?product=solutions" class="button is-gradient">お問い合わせ →</a> | ||
</section> |