第31章 JMS ブリッジ
HornetQ には、完全に機能する JMS メッセージングブリッジが含まれ、ソースキューまたはトピックからメッセージを消費し、通常は異なるサーバー上のターゲットキューまたはトピックに送信します。
ソースおよびターゲットサーバーは同じクラスター内に属する必要がないため、あるクラスターから別のクラスター (WAN 間、および接続が信頼できない場合) に安定してメッセージを送信する場合にブリッジングが適切になります。
また、ブリッジは、JMS 1.1 に準拠する他の非 HornetQ JMS サーバーからメッセージをブリッジ接続するために使用できます。
重要
JMS ブリッジは、任意の 2 つの JMS 1.1 準拠 JMS プロバイダーをブリッジ接続するために使用でき、JMS API を使用します。コアブリッジ (34章コアブリッジ で説明) は任意の 2 つの HornetQ インスタンスをブリッジ接続するために使用され、コア API を使用します。コアブリッジは、通常 JMS ブリッジよりも優れたパフォーマンスを提供し、XA を使用せずに 1 度だけの配信保証を提供します。
ブリッジには、耐障害性が組み込まれているため、ソースまたはターゲットサーバー接続が失われた場合 (たとえば、ネットワーク障害のため)、ブリッジはオンライン状態に戻るまでターゲットサーバーに再接続しようとします。この時点で操作は通常に戻ります。
ブリッジは、オプションの JMS セレクターで設定できるため、その JMS セレクターに一致するメッセージのみを消費します。
これは、キューまたはトピックから消費するよう設定できます。これは、トピックから消費するときに、非耐性または耐性サブスクライブを使用して消費するよう設定できます。
ブリッジは通常、
JBOSS_DIST/jboss-as/server/PROFILE/deploy にある Bean 設定ファイル (jms-bridge-jboss-beans.xml) を使用して JBoss Microcontainer によってデプロイされます。
例31.1「jms-bridge-jboss-beans.xml サンプル設定」 は、同じサーバーで 2 つの宛先をブリッジ接続する設定例を示しています。
例31.1 jms-bridge-jboss-beans.xml サンプル設定
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="urn:jboss:bean-deployer:2.0">
<bean name="JMSBridge" class="org.hornetq.api.jms.bridge.impl.JMSBridgeImpl">
<!-- HornetQ must be started before the bridge -->
<depends>HornetQServer</depends>
<constructor>
<!-- Source ConnectionFactory Factory -->
<parameter>
<inject bean="SourceCFF"/>
</parameter>
<!-- Target ConnectionFactory Factory -->
<parameter>
<inject bean="TargetCFF"/>
</parameter>
<!-- Source DestinationFactory -->
<parameter>
<inject bean="SourceDestinationFactory"/>
</parameter>
<!-- Target DestinationFactory -->
<parameter>
<inject bean="TargetDestinationFactory"/>
</parameter>
<!-- Source User Name (no user name here) -->
<parameter><null /></parameter>
<!-- Source Password (no password here)-->
<parameter><null /></parameter>
<!-- Target User Name (no user name here)-->
<parameter><null /></parameter>
<!-- Target Password (no password here)-->
<parameter><null /></parameter>
<!-- Selector -->
<parameter><null /></parameter>
<!-- Failure Retry Interval (in ms) -->
<parameter>5000</parameter>
<!-- Max Retries -->
<parameter>10</parameter>
<!-- Quality Of Service -->
<parameter>ONCE_AND_ONLY_ONCE</parameter>
<!-- Max Batch Size -->
<parameter>1</parameter>
<!-- Max Batch Time (-1 means infinite) -->
<parameter>-1</parameter>
<!-- Subscription name (no subscription name here)-->
<parameter><null /></parameter>
<!-- Client ID (no client ID here)-->
<parameter><null /></parameter>
<!-- Add MessageID In Header -->
<parameter>true</parameter>
<!-- register the JMS Bridge in the AS MBeanServer -->
<parameter>
<inject bean="MBeanServer"/>
</parameter>
<parameter>org.hornetq:service=JMSBridge</parameter>
</constructor>
<property name="transactionManager">
<inject bean="RealTransactionManager"/>
</property>
</bean>
<!-- SourceCFF describes the ConnectionFactory used to connect to the
source destination -->
<bean name="SourceCFF"
class="org.hornetq.api.jms.bridge.impl.JNDIConnectionFactoryFactory">
<constructor>
<parameter>
<inject bean="JNDI" />
</parameter>
<parameter>/ConnectionFactory</parameter>
</constructor>
</bean>
<!-- TargetCFF describes the ConnectionFactory used to connect to the
target destination -->
<bean name="TargetCFF"
class="org.hornetq.api.jms.bridge.impl.JNDIConnectionFactoryFactory">
<constructor>
<parameter>
<inject bean="JNDI" />
</parameter>
<parameter>/ConnectionFactory</parameter>
</constructor>
</bean>
<!-- SourceDestinationFactory describes the Destination used as the source -->
<bean name="SourceDestinationFactory"
class="org.hornetq.api.jms.bridge.impl.JNDIDestinationFactory">
<constructor>
<parameter>
<inject bean="JNDI" />
</parameter>
<parameter>/queue/source</parameter>
</constructor>
</bean>
<!-- TargetDestinationFactory describes the Destination used as the target -->
<bean name="TargetDestinationFactory"
class="org.hornetq.api.jms.bridge.impl.JNDIDestinationFactory">
<constructor>
<parameter>
<inject bean="JNDI" />
</parameter>
<parameter>/queue/target</parameter>
</constructor>
</bean>
<!-- JNDI is a Hashtable containing the JNDI properties required -->
<!-- to connect to the sources and targets JMS resources -->
<bean name="JNDI" class="java.util.Hashtable">
<constructor class="java.util.Map">
<map class="java.util.Hashtable" keyClass="String"
valueClass="String">
<entry>
<key>java.naming.factory.initial</key>
<value>org.jnp.interfaces.NamingContextFactory</value>
</entry>
<entry>
<key>java.naming.provider.url</key>
<value>jnp://localhost:1099</value>
</entry>
<entry>
<key>java.naming.factory.url.pkgs</key>
<value>org.jboss.naming:org.jnp.interfaces"</value>
</entry>
</map>
</constructor>
</bean>
<bean name="MBeanServer" class="javax.management.MBeanServer">
<constructor factoryClass="org.jboss.mx.util.MBeanServerLocator"
factoryMethod="locateJBoss"/>
</bean>
</deployment>
31.1. JMS ブリッジパラメーター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
例31.1「jms-bridge-jboss-beans.xml サンプル設定」 で示された
JMSBridge Bean は、特定の順序でコンストラクターに渡されるパラメーターを介して設定されます。この順序と各パラメーターの説明は以下のリストで示されています。
注記
パラメーターを未指定のままにする場合 (たとえば、認証が匿名である場合や、メッセージセレクターが提供されない場合) は、未指定のパラメーター値に対して
<null /> を使用します。
Source Connection Factory Factoryjms-bridge-jboss-beans.xmlファイルで定義されたSourceCFFBean を挿入します (ConnectionFactoryが作成されます)。Target Connection Factory Factoryjms-bridge-jboss-beans.xmlファイルで定義されたTargetCFFBean を挿入します (ターゲットConnectionFactoryが作成されます)。Source Destination Factory Factoryjms-bridge-jboss-beans.xmlファイルで定義されたSourceDestinationFactoryBean を挿入します (ソースDestinationが作成されます)。Target Destination Factory Factoryjms-bridge-jboss-beans.xmlファイルで定義されたTargetDestinationFactoryBean を挿入します (ターゲットDestinationが作成されます)。Source User Name- ソース接続を作成するために使用するユーザー名を定義します。
Source Password- ソース接続を作成するために使用するユーザー名のパスワードを定義します。
Target User Name- ターゲット接続を作成するために使用するユーザー名を定義します。
Target Password- ターゲット接続を作成するために使用するユーザー名のパスワードを定義します。
Selector- ソース宛先からメッセージを消費する場合に使用される JMS セレクター表現を指定します。セレクター表現に一致するメッセージのみがソース宛先からターゲット宛先にブリッジされます。セレクター表現は、JMS セレクター構文に従う必要があります。
Failure Retry Interval- ブリッジが接続障害を検出したときにソースサーバーまたはターゲットサーバーへの接続を再作成しようとするときにその試行間で待機する時間 (ミリ秒単位) を指定します。
Max Retries- ブリッジが接続障害を検出したときにソースまたはターゲットサーバーに対する接続を再作成しようとする回数を指定します。この回数後にブリッジは再接続の試行を止めます。
-1は、「永久的な試行」を意味します。 Quality of Service- サービスモードの品質を定義します。可能な値は次のとおりです。
AT_MOST_ONCEDUPLICATES_OKONCE_AND_ONLY_ONCE
これらのモードについては、「サービス品質モード」 を参照してください。 Max Batch Size- ターゲット宛先にメッセージをバッチで送信する前にソース接続から消費する必要があるメッセージの最大数を定義します。この値は
1以上である必要があります。 Max Batch Time- 消費されるメッセージの数が
MaxBatchSizeに到達しない場合であっても、ターゲット宛先にバッチを送信するまで待機する時間 (ミリ秒単位) を定義します。この値は1以上または-1(「永久的に待機」を指定する場合) である必要があります。 Subscription Name- ソース宛先がトピックであり、耐性サブスクリプションを持つトピックから消費する場合、このパラメーターは耐性サブスクリプション名を定義します。
Client ID- ソース宛先がトピックであり、耐性サブスクリプションを持つトピックから消費する場合、耐性サブスクリプションを作成またはルックアップするときにこのパラメーターは使用する JMS クライアント ID を定義します。
Add MessageID In Headertrueの場合、元のメッセージのメッセージ ID が、HORNETQ_BRIDGE_MSG_ID_LISTヘッダーの宛先に送信されるメッセージに付加されます。メッセージが複数回ブリッジ接続された場合は、各メッセージ ID が付加されます。これにより、分散応答パターンを使用できるようになります。注記
メッセージが受信された場合は、最初のメッセージ ID の相関 ID を使用して応答を送信できるため、元の送信者が応答を受け取ると、メッセージを関連付けることができます。MBean Server- JMS ブリッジを JMX で管理するために、これを JMS ブリッジが登録された場所 (アプリケーションサーバー MBeanServer) に設定します。
ObjectNameMBeanServerが設定された場合は、JMS Bridge MBean を登録するために使用する名前を定義するためにこのパラメーターを設定する必要があります。この名前は一意である必要があります。