![[UNIX、Linux、Windows]](ngulw.gif)
![[V9.0.0.0 2016 年 6 月]](ng900.gif)
AMQP でのメッセージ送達の信頼性
MQ Light および AMQP アプリケーションとの間のメッセージ送達の信頼性を制御できるようにする、 IBM® MQ Light API の 4 つの機能があります。
メッセージのサービスの品質 (QOS)
MQ Light API は、以下の 2 つのサービス品質を提供します。
- 最高 1 回
- 最低 1 回
パブリッシャーとサブスクライバーで使用するサービスの品質を選択することができます。
MQ Light クライアントを使用している場合は、クライアントまたはサブスクライブの qos オプションを QOS 接続のオンへの変更 または QOS AT_LEAST_ONCE (QOS AT_LEAST_ONCE)に設定します。
別の AMQP クライアントを使用する場合は、達成したいサービスの品質に応じて、転送フレーム (パブリッシャーの場合) の settled 属性、または処理フレーム (サブスクライバーの場合) を 真 または 偽に設定します。
サービス品質は、メッセージが会話の sending 側から破棄されるタイミングを決定します。
パブリッシャーが QOS 0 を (多くても 1 回) 選択した場合、パブリッシャーはキュー・マネージャーからの確認応答を待たずに、メッセージのコピーを破棄します。
送信が完了する前にキュー・マネージャーへの接続に障害が起こると、メッセージがサブスクライバーによって受信されない場合があります。
パブリッシャーが QOS 1 を (少なくとも 1 回) 選択すると、パブリッシャーは、メッセージのコピーを破棄する前に、サブスクライバー・キューにメッセージが書き込まれたことをキュー・マネージャーが確認するまで待機します。
送信中にキュー・マネージャーへの接続に障害が起こると、パブリッシャーは、キュー・マネージャーへの再接続が行われた後にメッセージを再送信します。
サブスクライバーが QOS 0 を選択した場合、キュー・マネージャーはサブスクライバーからの確認応答を待たずに、メッセージのコピーを破棄します。
サブスクライバーがメッセージを受信する前にサブスクライバーへの接続に障害が起こると、そのメッセージは失われる可能性があります。
サブスクライバーが QOS 1 を選択すると、キュー・マネージャーはサブスクライバーからの確認応答を待ってから、メッセージのコピーを破棄します。
サブスクライバーがメッセージを受信する前にサブスクライバーへの接続に障害が起こると、そのメッセージはキュー・マネージャーによって保持されます。 キュー・マネージャーは、キュー・マネージャーの再接続時にサブスクライバーにメッセージを再送信します。サブスクリプションが共用サブスクリプションである場合は別のサブスクライバーに再送信されます。
サブスクライバーの自動確認
サブスクライバーが QOS 1 を (少なくとも 1 回) 選択した場合、キュー・マネージャーがそのコピーを破棄する前に、各メッセージの受信を確認する必要があります。 サブスクライバーは、メッセージを確認するタイミングを決定できます。
auto-confirm を 真に設定すると、 MQ Light クライアントは、ネットワークを介してメッセージを正常に受信した後、各メッセージの配信を自動的に確認します。
これにより、ネットワーク障害が発生した場合、メッセージがアプリケーションに再送達されます。 ただし、 MQ Light クライアントがメッセージを確認してからアプリケーションがそのメッセージを処理するまでの間にアプリケーションで障害が発生した場合は、アプリケーションがメッセージを失う可能性があります。
auto-confirm を 偽に設定すると、 MQ Light クライアントはメッセージの送達を自動的に確認しませんが、いつ確認するかを決定するためにアプリケーションに任せます。
これにより、アプリケーションは、メッセージの処理が完了して廃棄可能になったことを示す確認応答をキュー・マネージャーに出す前に、外部リソース (データベースやファイルなど) を更新できるようになります。
サブスクリプション存続時間
アプリケーションがサブスクライブするときに、そのアプリケーションは、サブスクリプション、およびそのサブスクリプションでメッセージが保管される宛先を、アプリケーションの切断後も引き続き存続させるかどうかを選択します。
アプリケーションの切断後にサブスクリプションが存在し続ける時間 (ミリ秒単位) を指定するには、MQ Light サブスクライブ・オプション ttl を使用します。 アプリケーションがその時間より前に再接続されると、サブスクリプションが再開され、アプリケーションはそのサブスクリプションによるメッセージを引き続きコンシュームできます。
アプリケーションの再接続が行われずに存続時間の期間が経過すると、サブスクリプションは除去され、その宛先に保管されていたメッセージは、永続メッセージの場合でもすべて失われます。
メッセージが失われないようにすることが重要な場合、停止中にメッセージが失われることがないように、十分高い値の存続時間をアプリケーションに指定する必要があります。
メッセージの持続性
メッセージの持続性は、アプリケーションのパブリッシュとサブスクライブ、および IBM MQ トピック・オブジェクトの構成によって制御されます。
AMQP サブスクライバーが QOS 0 を (最大で 1 回) 使用し、非永続サブスクリプションを作成する場合、AMQP チャネルは、以下のテキストで説明されている他のオプションに関係なく、常に非永続メッセージをサブスクライバー・キューに書き込みます。
キュー・マネージャーが停止すると、サブスクリプションとメッセージの両方が失われることに注意してください。
AMQP パブリッシャーが AMQP durable ヘッダーを 真に設定すると、AMQP チャネルは永続メッセージをサブスクライバー・キューに書き込みます。
何らかの理由でキュー・マネージャーが停止した場合でも、サブスクライバーは、キュー・マネージャーの再始動時に引き続きメッセージを使用できます。
durable ヘッダーが設定されていない場合、AMQP チャネルは、関連する IBM MQ トピック・オブジェクトの DEFPSIST 属性に基づいて、パブリッシュされたメッセージの持続性を選択します。
デフォルトでは、これは SYSTEM.BASE.TOPIC であり、 いいえ (非永続) の DEFPSIST 属性を使用します。