PUBLISH メッセージは、関係するサブスクライバーへの配布のために、クライアントからブローカーに送信されます。 各メッセージは、トピック名 (サブジェクトやチャネルともいう) に関連付けられます。 これは、サブスクライバーが関係する対象を登録する情報源の分類について定義した、階層的なネーム・スペースです。 特定のトピック名にパブリッシュされたメッセージは、そのトピック用の接続されたサブスクライバーに送達されます。
均衡を保つために、クライアントが 1 つ以上のトピックにサブスクライブしたら、それらのトピックに対してパブリッシュされるメッセージは、PUBLISH メッセージとしてブローカーからクライアントへ送達されます。
以下の表は、固定ヘッダーの形式を示しています。
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
バイト 1 | メッセージ・タイプ (3) | DUP フラグ | QoS レベル | RETAIN | ||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | |
バイト 2 | 残りの長さ |
障害が検出されたために再送信される QoS レベル 1 またはレベル 2 のメッセージの場合、DUP ビットは 1 に設定されます。 これは、メッセージがすでに受信されたメッセージと重複する可能性があることをブローカーに示します。 ブローカーに対するこの情報の重要度は、QoS レベルによって異なります。 DUP ビットは、QoS レベル 0 のメッセージには使用されません。
変数ヘッダーには、以下のフィールドが含まれています。
メッセージ ID を生成し、パブリッシュしたアプリケーションに戻りハンドルとして戻されるような場合、これは一般にはプロトコル・ライブラリーの役割です。 このような方法により、1 つのクライアントで実行している複数のアプリケーションまたは複数のパブリッシュ・スレッドによって、重複したメッセージ ID が生成される危険を回避できます。
QoS レベル 0 のメッセージの変数ヘッダーではメッセージ ID を使用しないでください。
メッセージ ID は 16 ビットの符号なし整数です。 通常は大きくなっていきますが、あるメッセージから別のメッセージへと 1 つずつ大きくすることは求められていません。 メッセージ ID の 2 バイトの順序は、まず MSB、その後で LSB になります (ビッグ・エンディアン)。
メッセージ ID 0 (つまり、0x0000) は、無効なメッセージ ID として予約済みなので、使用してはなりません。
以下の表は、PUBLISH メッセージの変数ヘッダーの例を示しています。
フィールド | 値 |
---|---|
トピック名: | "a/b" |
QoS レベル | 1 |
メッセージ ID: | 10 |
この場合の変数ヘッダーの形式は、以下の表で示しています。
説明 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
トピック名 | |||||||||
バイト 1 | Length MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
バイト 2 | Length LSB (3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
バイト 3 | 'a' (0x61) | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
バイト 4 | '/' (0x2F) | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
バイト 5 | 'b' (0x62) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
メッセージ ID | |||||||||
バイト 6 | Message ID MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
バイト 7 | Message ID LSB (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
パブリッシュするデータが含まれます。データの内容および形式は、アプリケーション固有のものです。 固定ヘッダーの「残りの長さ」フィールドには、変数ヘッダーの長さとペイロードの長さの両方が含まれます。
PUBLISH メッセージへの応答は、QoS レベルによって異なります。 以下の表は、予期される応答を示しています。
QoS レベル | 予期される応答 |
---|---|
QoS 0 | なし |
QoS 1 | PUBACK |
QoS 2 | PUBREC |
PUBLISH メッセージは、パブリッシャーからブローカーへ、またはブローカーからサブスクライバーへのいずれかで送信できます。 メッセージを受信したときの受信側のアクションは、メッセージの QoS レベルによって異なります。
ブローカーがメッセージを受信する場合、関係するパーティーとは、PUBLISH メッセージのトピックに対するサブスクライバーを指します。 サブスクライバーがメッセージを受信する場合、関係するパーティーとは、1 つ以上のトピックにサブスクライブし、ブローカーからのメッセージを待機するクライアント上のアプリケーションを指します。