WebSphere MQ Telemetry Transport サービス品質レベルおよびフロー

WebSphere MQ Telemetry Transport は、サービス品質で定義されているレベルに従ってメッセージを配送します。サービス品質レベルについては、以下に示します。

QoS レベル 0「最大で一回」送達

メッセージは基礎となる TCP/IP ネットワークを最大限に利用して送達されます。 応答は想定されておらず、プロトコルで、再試行のセマンティクスは定義されていません。 メッセージは、一度ブローカーに到着するか、または一度も到着しないかのいずれかです。

QoS レベル 1「最低で一回」送達

ブローカーによるメッセージの受信および WebSphere MQ キューへの配置 (ただし該当する場合) は、 PUBACK メッセージによって確認されます。通信リンクまたは送信デバイスのいずれかで障害が識別された場合、 または指定された時間が過ぎても確認通知メッセージが受信されなかった場合、 送信側は、メッセージ・ヘッダー内の DUP ビットをセットしてメッセージを再送信します。 メッセージは、少なくとも一度ブローカーに到着します。

QoS レベル 2「一回だけ」送達

QoS レベル 1 に加えて余分のプロトコル・フローを使用し、 受信側アプリケーションに重複したメッセージが送達されないようにします。 これは最高レベルの送達であり、重複したメッセージを受け入れられない場合に使用されます。 ネットワーク・トラフィックは増えることになりますが、 メッセージの内容が重要なときには、それだけの価値がある場合があります。

あるクラスの障害では、QoS レベル 1 または 2 を持つメッセージは送達不能になります。

QoS レベル 1 または 2 のメッセージは、メッセージ・ヘッダー内にメッセージ ID があります。

QoS レベル 1 および 2 に関する前提事項

WebSphere MQ Telemetry Transport を使用するアプリケーションを開発する前に、 QoS レベル 1 および 2 に関する前提事項に留意する必要があります。

「確実な」送達の中には、問題をはらんでいる部分があります。 「疑わしい」期間の出現 (この場合、 ある装置に障害が発生すると、システム側は、 リンクの一方がもう一方で生じたことを正確に知らされないままの状態に置かれる) は、 すべての状況下で「確実な」送達を実現することが困難であることを意味しています。 デバイスおよびネットワークの信頼性に関していくらかの想定を行い、 メッセージを確実に送達する可能性が高いという結論を下さなければなりません。

WebSphere MQ Telemetry Transport では、クライアントとブローカーはどちらも一般的には信頼性があると想定しますが、 通信チャネルの方が信頼性が低いと見なします。さらに、クライアント・デバイスに障害が発生する場合、一時的な障害ではなく、 破局的な障害である場合が大部分です。 ですから、デバイスのデータを回復できる見込みは低くなります。一部のデバイスは、不揮発性ストレージ (たとえば、フラッシュ ROM) を持っています。 クライアント・デバイス上にさらに持続性の高いストレージがあると、 一部のモードの障害から最も重要なデータが保護されます。

通信リンクの基本障害を超えると、 障害モード・マトリックスは複雑になり、 WebSphere MQ Telemetry Transport の仕様が処理できるよりも多くのシナリオが発生します。

再試行

確認されていないメッセージを再送するまでの時間の遅延は、 アプリケーションによって異なり、プロトコル仕様では定義されません。

QoS プロトコル・フロー

QoS レベルは、クライアントとブローカーとの間のメッセージのシーケンスを定義するプロトコル・フローによってサポートされます。

QoS レベル 0 プロトコル・フロー

以下の表は、QoS レベル 0 プロトコル・フローを示しています。

クライアント メッセージおよび方向 ブローカー
QoS = 0

PUBLISH
---------->

アクション: メッセージをサブスクライバーへパブリッシュする

QoS レベル 1 プロトコル・フロー

以下の表は、QoS レベル 1 プロトコル・フローを示しています。

クライアント メッセージおよび方向 ブローカー

QoS = 1
DUP = 0
Message ID = x

PUBLISH
---------->

アクション: メッセージをサブスクライバーへパブリッシュする
アクション: メッセージを破棄する

PUBACK
<----------

 

クライアントがアプリケーション内で定義されている時間枠内に PUBACK メッセージを受信しないか、 障害が検出されて通信セッションを再始動しなければならない場合、 クライアントは DUP フラグをセットして PUBLISH メッセージを再送します。

クライアントから重複メッセージを受信すると、 ブローカーはサブスクライバーに対してもう一度メッセージをパブリッシュし、 別の PUBACK メッセージを送信します。

QoS レベル 2 プロトコル・フロー

以下の表は、QoS レベル 2 プロトコル・フローを示しています。

クライアント メッセージおよび方向 ブローカー

QoS = 2
DUP = 0
Message ID = x

PUBLISH
---------->

アクション: メッセージを永続記憶域へログ記録する
 

PUBREC
<----------

Message ID = x
Message ID = x

PUBREL
---------->

アクション: メッセージをサブスクライバーへパブリッシュする
アクション: メッセージを破棄する

PUBCOMP
<----------

Message ID = x

障害が検出される場合、または定義された時間枠を超えた場合、 プロトコル・フローのそれぞれの部分が、DUP ビットをセットして再試行されます。 別のプロトコル・フローを送信すると、 メッセージは確実に「一回」と「一回だけ」でサブスクライバーへ送達されます。 SUBSCRIBE および UNSUBSCRIBE メッセージは、QoS レベル 1 を使用します。

関連概念
WebSphere MQ Telemetry Transport

関連資料
WebSphere MQ Telemetry Transport 変数ヘッダー
WebSphere MQ Telemetry Transport コマンド・メッセージ