第21章 信頼性の高いメッセージングの有効化
概要
Apache CXF は、WS-Reliable Messaging (WS-RM) をサポートしています。この章では、Apache CXF で WS-RM を有効にして設定する方法を説明します。
21.1. WS-RM の概要
概要
WS-ReliableMessaging (WS-RM) は、分散環境でのメッセージの信頼性の高い配信を保証するプロトコルです。これにより、ソフトウェア、システム、またはネットワークに障害が発生した場合でも、分散アプリケーション間でメッセージを確実に配信できます。
たとえば、WS-RM を使用すると、正しいメッセージがネットワークを介して 1 回だけ、正しい順序で配信されていることを確認できます。
WS-RM のしくみ
WS-RM は、送信元エンドポイントと宛先エンドポイント間のメッセージの信頼性の高い配信を保証します。図21.1「Web サービスの信頼できるメッセージング」 に示すように、送信元はメッセージの最初の送信者であり、宛先は最終的な受信者です。
図21.1 Web サービスの信頼できるメッセージング
WS-RM メッセージのフローは、次のように説明できます。
-
RM ソースは
CreateSequence
プロトコルメッセージを RM 宛先に送信します。これには、確認応答を受け取るエンドポイント (wsrm:AcksTo
エンドポイント) の参照が含まれます。 -
RM 宛先は
CreateSequenceResponse
プロトコルメッセージを RM ソースに戻します。このメッセージには、RM シーケンスセッションのシーケンス ID が含まれています。 -
RM ソースは、アプリケーションソースが送信する各メッセージに RM
Sequence
ヘッダーを追加します。このヘッダーには、シーケンス ID と一意のメッセージ ID が含まれています。 - RM 送信元は、各メッセージを RM 宛先に送信します。
-
RM 宛先は、RM
SequenceAcknowledgement
ヘッダーが含まれるメッセージを送信し、RM ソースからメッセージの受信を認識します。 - RM 宛先は、メッセージを 1 回限りの順序でアプリケーション宛先に配信します。
RM ソースは、確認応答をまだ受信していないというメッセージを再送信します。
最初の再送信の試行は、基本再送信間隔の後に行われます。連続した再送信の試行は、デフォルトで、指数バックオフ間隔で、または代わりに、固定間隔で行われます。詳細は、「WS-RM の設定」 を参照してください。
このプロセス全体は、要求メッセージと応答メッセージの両方で対称的に発生します。つまり、応答メッセージの場合、サーバーは RM ソースとして機能し、クライアントは RM 宛先として機能します。
WS-RM 配信保証
WS-RM は、使用されるトランスポートプロトコルに関係なく、分散環境での信頼性の高いメッセージ配信を保証します。信頼できる配信が保証されない場合は、送信元エンドポイントまたは宛先エンドポイントのいずれかがエラーをログに記録します。
サポートされている仕様
Apache CXF は、次のバージョンの WS-RM 仕様をサポートしています。
- WS-ReliableMessaging 1.0
(デフォルト) 2005 年 2 月の提出バージョン に対応しますが、現在は古くなっています。ただし、下位互換性のため、このバージョンがデフォルトとして使用されます。
WS-RM のバージョン 1.0 は、次の名前空間を使用します。
http://schemas.xmlsoap.org/ws/2005/02/rm/
このバージョンの WS-RM は、次の WS-Addressing バージョンのいずれかで使用できます。
http://schemas.xmlsoap.org/ws/2004/08/addressing (default) http://www.w3.org/2005/08/addressing
厳密に言えば、WS-RM の 2005 年 2 月の提出バージョンに準拠するには、これらの WS-Addressing バージョンの最初のバージョン (Apache CXF のデフォルト) を使用する必要があります。ただし、他のほとんどの Web サービス実装は最新の WS-Addressing 仕様に切り替えられているため、Apache CXF では WS-A バージョンを選択して、相互運用性を促進できます (「ランタイム制御」 を参照)。
- WS-ReliableMessaging 1.1/1.2
公式の 1.1/1.2 Web サービスの信頼できるメッセージング 仕様に対応します。
WS-RM のバージョン 1.1 および 1.2 は、次の名前空間を使用します。
http://docs.oasis-open.org/ws-rx/wsrm/200702
WS-RM の 1.1 および 1.2 バージョンは、次の WS-Addressing バージョンを使用します。
http://www.w3.org/2005/08/addressing
WS-RM バージョンの選択
次のように、使用する WS-RM 仕様のバージョンを選択できます。
- サーバー側
- プロバイダー側では、Apache CXF は、クライアントが使用する WS-ReliableMessaging のバージョンに適応し、適切に応答します。
- クライアント側の設定
- クライアント側では、WS-RM バージョンは、クライアント設定で使用するネームスペースによって決定されます (「WS-RM の設定」 を参照)。または、ランタイム制御オプションを使用して、実行時に WS-RM バージョンをオーバーライドする (「ランタイム制御」 を参照)。