SUBSCRIBE - 指定したトピックへのサブスクライブ

SUBSCRIBE メッセージでは、 クライアントは関係するものを 1 つ以上のトピック名でブローカーに登録できます。 これらのトピックにパブリッシュされるメッセージは、 ブローカーからクライアントに PUBLISH メッセージとして送達されます。 SUBSCRIBE メッセージでは、 サブスクライバーがパブリッシュされたメッセージを受信するときの QoS レベルも指定します。

固定ヘッダー

以下の表は、固定ヘッダーの形式を示しています。

ビット 7 6 5 4 3 2 1 0
バイト 1 メッセージ・タイプ (8) DUP フラグ QoS レベル RETAIN
  1 0 0 0 0 0 1 x
バイト 2 残りの長さ
QoS レベル
SUBSCRIBE メッセージは、QoS レベル 1 を使用して、 複数のサブスクリプション要求を確認します。 対応する SUBACK メッセージは、Message ID を突き合わせることにより識別できます。 また、PUBLISH メッセージと同じ方法で SUBSCRIBE メッセージの再試行を処理します。
DUP フラグ
この例では、DUP フラグは、 メッセージがはじめて送信されていることを示すためにゼロ (0) に設定されます。 SUBACK メッセージが指定されたタイムアウト期間が過ぎても到着しないために、 このメッセージが再送信される場合、 すでに受信したメッセージの重複である可能性があることをブローカーに伝えるために DUP ビットが設定されます。
RETAIN フラグ
使用されません。
残りの長さフィールド
ペイロードの長さ。 これは、マルチバイト・フィールドの場合もあります。

変数ヘッダー

SUBSCRIBE メッセージは QoS レベルが 1 であるため、 変数ヘッダーには、メッセージ ID が含まれています。

通常は、プロトコル・ライブラリーはメッセージ ID を生成し、 パブリッシュしたアプリケーションに戻りハンドルとして戻します。 このような方法により、 1 つのクライアントで実行している複数のアプリケーションまたは複数のパブリッシュ・スレッドによって、 重複したメッセージ ID が生成される危険を回避できます。

メッセージ ID 0 (0x0000) は、無効なメッセージ ID として予約済みなので、 使用してはなりません。 メッセージ ID は 16 ビットの符号なし整数です。 通常は大きくなっていきますが、あるメッセージから別のメッセージへと 1 つずつ大きくすることは求められていません。 メッセージ ID の 2 バイトの順序は、まず MSB、その後で LSB になります (ビッグ・エンディアン)。

以下の表は、10 というメッセージ ID を持つ変数ヘッダーの形式の例を示しています。

  説明 7 6 5 4 3 2 1 0
メッセージ ID
バイト 1 Message ID MSB (0) 0 0 0 0 0 0 0 0
バイト 2 Message ID LSB (10) 0 0 0 0 1 0 1 0

ペイロード

SUBSCRIBE メッセージのペイロードには、 クライアントがサブスクライブする先のトピック名のリストと、 クライアントがメッセージを受信するときの QoS レベルが含まれています。 ストリングは UTF エンコードされており、 QoS レベルは 1 バイトの 2 ビットを占有しています。 これらの Topic/QoS の組みは、以下の表のペイロードの例に示されているように、 連続して圧縮されます。

トピック名 "a/b"
要求された QoS 1
トピック名 "c/d"
要求された QoS 2

SUBSCRIBE メッセージのトピック名は、圧縮されません。

ペイロードの例の形式は、以下の表で示しています。

  説明 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
要求された QoS
バイト 6 要求された QoS (1) x x x x x x 0 1
トピック名
バイト 7 Length MSB (0) 0 0 0 0 0 0 0 0
バイト 8 Length LSB (3) 0 0 0 0 0 0 1 1
バイト 9 'c' (0x63) 0 1 1 0 0 0 1 1
バイト 10 '/' (0x2F) 0 0 1 0 1 1 1 1
バイト 11 'd' (0x64) 0 1 1 0 0 1 0 0
要求された QoS
バイト 12 要求された QoS (2) x x x x x x 1 0

要求した QoS レベルが認可される場合、 クライアントは、パブリッシャーからの元のメッセージの QoS レベルに応じて、 このレベル以下の PUBLISH メッセージを受信します。 例えば、クライアントが特定のトピックに対して QoS レベル 1 サブスクリプションを持っている場合、 そのトピックへの QoS レベル 0 PUBLISH メッセージは、 QoS レベル 0 でクライアントに送達されます。 同じトピックへの QoS レベル 2 PUBLISH メッセージは、 クライアントへの送達のために QoS レベル 1 に格下げされます。

結果的に、QoS レベル 2 でトピックにサブスクライブすることは、 このトピックに対するメッセージは、メッセージがパブリッシュされたときの QoS で受信するということと同じです。

「要求された QoS」フィールドは、以下の表に示されているように、 UTF エンコードされた各トピック名に続くバイトの中にエンコードされます。

ビット 7 6 5 4 3 2 1 0
  予約済み 予約済み 予約済み 予約済み 予約済み 予約済み QoS レベル
  x x x x x x    

このバイトの上方 6 ビットは、現行バージョンのプロトコルでは使用されていません。 これらは将来の利用のために予約済みです。

応答

クライアントから SUBSCRIBE メッセージを受信すると、 ブローカーは SUBACK メッセージで応答します。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac11010_