第8章 JBoss Messaging のメッセージブリッジの設定

8.1. メッセージブリッジの概要

JBoss Messaging には完全に機能するメッセージブリッジが収納されています。
ブリッジは、ソースキューやトピックからメッセージをコンシュームして、一般的にはそれらを別のサーバー上にある目的のキューやトピックに送信します。ソースのサーバーと目的のサーバーは同じクラスター内にある必要はないため、ブリッジングは接続が不確かな状況下においてあるクラスターから別のクラスターにメッセージを送信する場合に確実な方法となります ( WAN 全体など)。
ブリッジは JBoss Enterprise Application Platform インスタンス内に管理 Bean としてデプロイされます。その方法は、JBoss Messaging を含む Enterprise Application Platform 設定の deploy ディレクトリに管理 Bean 記述子を追加することです。
$JBOSS_HOME/docs/examples/jboss-messaging-examples/bridge/ にあるサンプルでは、シンプルなブリッジが JBoss Enterprise Application Platform でデプロイされ、メッセージをソースから目的のディレクトリまで移動する例が見られます。
JMS 1.1 準拠であれば、JBoss Messaging JMS サーバー以外の他のサーバーからメッセージを取得するためにもこのブリッジを使用できます。
ブリッジには障害に対するビルトインの耐性があります。ソースまたは目的のサーバーの接続が失われると、ブリッジはそのソースまたは目的のサーバーがオンラインに復帰するまで再接続を試みます。オンラインに復帰すると、通常通りに動作を再開します。
ブリッジは特定の JMS セレクターに一致するメッセージをコンシュームするように設定することができます。
キューまたはトピックからコンシュームするように設定が可能です。ブリッジがトピックからコンシュームする場合、非持続的なサブスクリプションまたは持続的なサブスクリプションでコンシュームするように設定できます。
ブリッジは 3 種類の サービスの質 (QoS) レベルのうちひとつでメッセージを処理するように設定することができます。

ブリッジ QoS レベル

QOS_AT_MOST_ONCE
このモードでは、メッセージが最大で 1 回デスティネーションに届くように指定します。メッセージはソースからコンシュームされ、デスティネーションに送信される前に確認されます。このため、メッセージがソースから離れてデスティネーションに到着するまでの間に障害が発生すると、メッセージは失われる可能性があります。したがって、メッセージは最大で 1 回配信されることになります。
このモードは、永続メッセージと非永続メッセージの両方に使用できます。
QOS_DUPLICATES_OK
このモードは、メッセージがデスティネーションに正しく送信された後に、ソースからコンシュームされ確認されるように指定します。メッセージがデスティネーションに到着して確認されるまでの間に障害が発生すると、そのメッセージはシステムが復帰した時に 2 回目の送信が行われます。
このモードは、永続メッセージと非永続メッセージの両方に使用できます。
QOS_ONCE_AND_ONLY_ONCE
このモードでは、メッセージが 1 回だけ届くように指定します。メッセージのソースとデスティネーションが同じ JBoss Messaging サーバーインスタンス上にある場合は、同じローカルトランザクション内でメッセージの送受信を行うことができます。
ソースとデスティネーションが異なるサーバー上にある場合は、JBoss Transactions の JTA 実装で制御される JTA トランザクションを使用して、高い持続性を持つメッセージを実装できます。JTA が必要な場合は、両方の接続ファクトリとも XAConnectionFactory 実装である必要があります。
このモードは永続メッセージにしか使用できません。
このモードは、復元に対応するようトランザクションマネージャとリソース側の両方でロギングが必要です。このレベルの QOS を必要とする場合は、JBoss Transactions で XA Recovery を有効にする必要があります。

注記

特定のアプリケーションでは QOS_ONCE_AND_ONLY_ONCE を設定することなく 一度限り セマンティックを適用できる場合があります。QOS_DUPLICATES_OK モードに設定し、デスティネーションで重複メッセージをチェックして破棄します。
ディスクで受信したメッセージ ID のキャッシュを維持し、受信したメッセージとこのキャッシュを比較することで、アプリケーションレベルで QOS_ONCE_AND_ONLY_ONCE 動作を実装できます。キャッシュは一定期間しか有効でないためこの方法は完璧ではありませんが、ご使用のアプリケーションによっては便利な選択肢となる場合があります。