|
|
JMS 補完機能 (フォルト トレーランス (クライアント サイドの永続化)) |
|
JMS では、障害が発生した場合でもメッセージがコンシューマに配信されるよう、次のメカニズムが規定されています。
- ストア&フォワード方式 (ディストネーションと ACKNOWLEDGE)
- メッセージの永続化 (persistent)
- 継続サブスクライバ (durable subscriber)
これらは、JMS サーバーもしくはコンシューマ クライアントに障害が発生した場合の、コンシューマへのメッセージ配信を保証するメカニズムです。別の言葉でいえば、コンシューマの堅牢性 (durable) を提供するものです。
しかしながら、JMS では、プロデューサ クライアントに対する同様な堅牢性 (durable) を提供するメカニズムが規定されていません。
FioranoMQ では、プロデューサ クライアントにサーバー障害時の処理続行を保証する
と呼ぶ機能を設けました。これは、プロデューサ クライアントの側に、ストア&フォワードのメカニズムを提供するものです。
JMS クライアントの耐障害性を高める機能である 恒久接続 についても参照してください。
クライアント サイドの永続化
よくある問題 (プロデューサ側でのメッセージの損失)
プロデューサは、JMS サーバーとの接続に障害が発生すると、メッセージを送信することができず、処理を中断することが求められます。障害復旧後に JMS プロバイダーに再接続し、メッセージの送信をやり直さなければなりません。
図 1 のようなケースを想定してみます。このアプリケーション システムは、4 つの製造ラインを監視し、不良品が検出されると JMS メッセージングによって製造ライン制御アプリケーションに通知します。製造ラインを監視し、不良品の通知を行うアプリケーションはそれぞれプロデューサとして稼動し、通知を受け取る製造ライン制御アプリケーションはコンシューマとして稼動しています。あるラインを監視しているプロデューサの 1 つが何らかの障害によって JMS サーバーに接続できなくなったと仮定します。
JMS 仕様では、このような場合、プロデューサは処理を中断し、障害が回復した後にメッセージを送信しなければなりません。しかし、製造ラインは稼動しており、不良品もライン上を流れてきます。障害回復まで製造ラインを止めることはできません。FioranoMQ では、このようなアプリケーションを想定して、"クライアント サイドの永続化" を設けました。
図 1. プロデューサの接続障害
クライアント サイドの永続化によるソリューション
クライアント サイドの永続化は、図 2 に示すように、プロデューサが何らかの障害によって JMS サーバーに接続できなくなった場合、メッセージをプロデューサのローカル ストアに保存する機能です。プロデューサは、メッセージを損失することなく、処理を続行することができます。
恒久接続 機能も有効にしていると、この間、サーバーへの再接続を自動的に試みます。
クライアント サイドの永続化 (メッセージのローカル ストアへの保存) は、ランタイム ライブラリによって自動的に行われます。
JMS クライアントの作成に特別な API を必要しないため、JMS に準拠したクライアント プログラムを作成でき、FioranoMQ 以外の JMS プロバイダとも連携させることができます。
図 2. 恒久接続とクライアント サイドの永続化
|
|
|
|
|
|