第27章 JMS ブリッジの設定

JBoss EAP メッセージングには、完全な機能を備えた JMS メッセージブリッジが含まれます。JMS ブリッジの機能は、ソースキューまたはトピックからメッセージを消費し、通常は別のサーバーにあるターゲットキューまたはトピックに送信することです。

ソース宛先がトピックの場合、JMS ブリッジはそのサブスクリプションを作成します。client-id および subscription-name 属性が JMS ブリッジに設定されていると、サブスクリプションが永続化されます。これは、JMS ブリッジが停止後に再起動されてもメッセージがなくならないことを意味します。

ソースサーバーとターゲットサーバーは同じクラスターに置く必要はありません。このため、たとえば WAN を介して、接続が信頼できない場合に、あるクラスターから別のクラスターに確実にメッセージを送信するのにブリッジングが適しています。

注記

JMS ブリッジをコアブリッジと混同しないようにしてください。JMS ブリッジは、JMS 1.1 準拠の 2 つの JMS プロバイダーをブリッジするのに使用でき、JMS API を使用します。コアブリッジは、2 つの JBoss EAP メッセージングインスタンスをブリッジするのに使用され、コア API を使用します。可能な場合は、JMS ブリッジではなく、コアブリッジを使用することが推奨されます。

以下の例は、JBoss EAP JMS ブリッジの設定を示しています。

<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
  <server name="default">
  ...
  </server>
  <jms-bridge name="my-jms-bridge" module="org.apache.activemq.artemis" max-batch-time="100" max-batch-size="10" max-retries="1" failure-retry-interval="500" quality-of-service="AT_MOST_ONCE">
    <source destination="jms/queue/InQueue" connection-factory="ConnectionFactory">
      <source-context/>
    </source>
    <target destination="jms/queue/OutQueue" connection-factory="jms/RemoteConnectionFactory">
      <target-context>
        <property name="java.naming.factory.initial" value="org.wildfly.naming.client.WildFlyInitialContextFactory"/>
        <property name="java.naming.provider.url" value="http-remoting://192.168.40.1:8080"/>
      </target-context>
    </target>
  </jms-bridge>
  ...
</subsystem>

管理 CLI を使用した JMS ブリッジの追加

以下の管理 CLI コマンドを使用して JMS ブリッジを追加できます。ソースとターゲットの宛先が設定にすでに定義されている必要があることに注意してください。設定可能な属性の完全なリストは、付録の表を参照してください。

/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:add(quality-of-service=AT_MOST_ONCE,module=org.apache.activemq.artemis,failure-retry-interval=500,max-retries=1,max-batch-size=10,max-batch-time=100,source-connection-factory=ConnectionFactory,source-destination=jms/queue/InQueue,source-context={},target-connection-factory=jms/RemoteConnectionFactory,target-destination=jms/queue/OutQueue,target-context={java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory,java.naming.provider.url=http-remoting://192.168.40.1:8080})

以下の例のように、管理 CLI で read-resource コマンドを使用して JMS ブリッジの設定を確認できます。

/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:read-resource

以下の例にあるように、write-attribute を使用して JMS ブリッジに設定を追加します。

/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:write-attribute(name=ATTRIBUTE,value=VALUE)

管理コンソールを使用した JMS ブリッジの追加

以下の手順に従うことで、管理コンソールを使用して JMS ブリッジを追加することもできます。

  1. ブラウザーで管理コンソールを開き、設定サブシステムMessaging (ActiveMQ)JMS ブリッジに移動します。
  2. 追加 (+) ボタンをクリックし、プロンプトが表示されたら必要な情報を入力します。
  3. 終了したら 追加 をクリックします。

27.1. サービス品質

JBoss EAP の quality-of-service は、メッセージが消費され、確認応答される方法を決定する設定可能な属性です。quality-of-service の有効な値とその説明を以下に示します。JMS ブリッジ属性の完全なリストは、付録の表を参照してください。

AT_MOST_ONCE

メッセージはソースから宛先に最大 1 回到達します。メッセージはソースから消費され、確認応答された後、宛先に送信されます。そのため、ソースで削除され、宛先に到達するまでの間に障害が発生した場合に、メッセージが失われる可能性があります。このモードはデフォルト値です。

このモードは永続メッセージと非永続メッセージの両方に使用できます。

DUPLICATES_OK

メッセージは、宛先に正常に送信された後、ソースから消費され、確認応答されます。そのため、最初のメッセージが送信された後で、確認応答される前にエラーが発生した場合、メッセージを再送信できる可能性があります。

このモードは永続メッセージと非永続メッセージの両方に使用できます。

ONCE_AND_ONLY_ONCE

メッセージはソースから宛先に 1 回のみ到達します。ソースと宛先の両方が同じサーバーインスタンスにある場合は、同じローカルトランザクションでメッセージを送信して確認応答することで、これを実現できます。ソースと宛先が異なるサーバー上にある場合は、JTA トランザクションで送信セッションと消費セッションを登録することで実現されます。JTA トランザクションは JTA トランザクションマネージャーによって制御されます。これは、ブリッジで setTransactionManager() メソッドを使用して設定する必要があります。

このモードは永続メッセージのみに使用できます。

警告

quality-of-service 属性が ONCE_AND_ONLY_ONCE に設定されているデプロイ済みの JMS ブリッジを持つサーバーをシャットダウンする場合は、予期しないエラーを防ぐために、JMS ブリッジを持つサーバーを最初にシャットダウンするようにしてください。

ONCE_AND_ONLY_ONCE ではなく DUPLICATES_OK モードを使用し、宛先で重複を確認して破棄することにより、1 回限りのセマンティクスを提供できる可能性があります。詳細は、「重複メッセージ検出の設定」を参照してください。ただし、キャッシュは一定期間のみ有効になります。そのため、このアプローチは ONCE_AND_ONLY_ONCE を使用するほどは完璧ではありませんが、特定のアプリケーションのニーズによっては適切な選択肢となる可能性があります。