Menu Close

第21章 Reliable Messaging の有効化

概要

Apache CXF は WS-Reliable Messaging (WS-RM) をサポートします。本章では、Apache CXF で WS-RM を有効化および設定する方法を説明します。

21.1. WS-RM の概要

概要

WS-Reliable Messaging (WS-RM) は、分散環境で信頼性の高いメッセージ配信を確保するプロトコルです。ソフトウェア、システム、またはネットワークの障害の発生時に、分散アプリケーション間でメッセージを確実に配信できます。

たとえば、WS-RM を使用して、正しいメッセージがネットワークに 1 度だけ正しい順序で配信されるようにすることができます。

WS-RM の仕組み

WS-RM は、ソースと宛先エンドポイント間の信頼性の高いメッセージ配信を確保します。図21.1「Web サービスの Reliable Messaging」に示されているように、ソースはメッセージの最初の送信者で、宛先は最終的な受信者です。

図21.1 Web サービスの Reliable Messaging

reliable message exchange

WS-RM メッセージのフローは、以下のようになります。

  1. RM ソースは CreateSequence プロトコルメッセージを RM 宛先に送信します。これには、確認応答を受け取るエンドポイント (wsrm:AcksTo エンドポイント) の参照が含まれます。
  2. RM 宛先は RM ソースに CreateSequenceResponse プロトコルメッセージを返信します。このメッセージには、RM シーケンスセッションのシーケンス ID が含まれます。
  3. RM ソースは、アプリケーションソースから送信する各メッセージに RM Sequence ヘッダーを追加します。このヘッダーには、シーケンス ID と一意のメッセージ ID が含まれます。
  4. RM ソースは、各メッセージを RM 宛先に送信します。
  5. RM 宛先は、RM SequenceAcknowledgement ヘッダーが含まれるメッセージを送信して、RM ソースからのメッセージの受信を通知します。
  6. RM 宛先は、メッセージをアプリケーションの宛先に 1 度だけ正しい順序で配信します。
  7. RM ソースは、まだ確認応答を受け取っていないメッセージを再送信します。

    最初の再送信は、ベースの再送信間隔の後に行われます。その後の再送信の試行は、デフォルトの指数バックオフ間隔、あるいは一定の間隔で行われます。詳細は、「WS-RM の設定」を参照してください。

このプロセス全体は、リクエストとレスポンスメッセージの両方に対して対称的に行われます。つまり、レスポンスメッセージの場合、サーバは RM ソースとして機能し、クライアントは RM 宛先として機能します。

WS-RM 配信の保証

WS-RM は、使用するトランスポートプロトコルに関係なく、分散環境で信頼性の高いメッセージ配信を保証します。信頼性の高い配信を確保できない場合、ソースまたは宛先エンドポイントのいずれかがエラーを記録します。

サポートされる仕様

Apache CXF は、WS-RM 仕様の以下のバージョンをサポートします。

WS-ReliableMessaging 1.0

(デフォルト) 現在では旧式の 2005 年 2 月投稿バージョン に対応します。ただし、後方互換性の理由から、このバージョンがデフォルトとして使用されます。

WS-RM のバージョン 1.0 は以下の namespace を使用します。

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 サービス Reliable Messaging 仕様に対応します。

WS-RM のバージョン 1.1 および 1.2 は、以下の namespace を使用します。

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-reliable Messaging が使用されていても対応し、適切に応答します。
クライアント側
クライアント側では、クライアント設定で使用する namespace によって (「WS-RM の設定」を参照)、あるいはランタイム制御オプションを使用してランタイム時に WS-RM バージョンを上書きして (「ランタイム制御」を参照)、WS-RM バージョンが決定されます。