第27章 Jakarta Messaging Bridge の設定
JBoss EAP メッセージングには、ソース宛先からメッセージを取得してターゲット宛先(通常は異なるサーバー)に送信する Jakarta Messaging ブリッジが含まれます。
Jakarta Messaging ブリッジは、各リンクが以下で定義された送信元とターゲットで設定される宛先マッピングをサポートします。
- ソースは、Jakarta Messaging ブリッジがメッセージを受信する宛先を定義します。ソースは、Jakarta Messaging プロバイダーへの接続を作成するための接続ファクトリーと、そのプロバイダーのメッセージソース宛先で設定されます。
- ターゲットは、Jakarta Messaging ブリッジがソースから受信されたメッセージを送信する宛先を定義します。ターゲットは、Jakarta Messaging プロバイダーへの接続を作成するための接続ファクトリーと、そのプロバイダーのメッセージターゲット宛先で設定されます。
ソース宛先がトピックの場合、Jakarta Messaging ブリッジはそのサブスクリプションを作成します。client-id および subscription-name 属性が Jakarta Messaging ブリッジに設定されていると、サブスクリプションが永続化されます。これは、Jakarta Messaging ブリッジが停止後に再起動されてもメッセージがなくならないことを意味します。
ソースサーバーとターゲットサーバーは同じクラスターに置く必要はありません。このため、たとえば WAN を介して、接続が信頼できない場合に、あるクラスターから別のクラスターに確実にメッセージを送信するのにブリッジングが適しています。
Jakarta Messaging ブリッジをコアブリッジと混同しないようにしてください。Jakarta Messaging ブリッジは、2 つの Jakarta Messaging-1.1 準拠のプロバイダーをブリッジするのに使用でき、Jakarta Messaging API を使用できます。コアブリッジの設定は、 2 つの JBoss EAP メッセージングインスタンスをブリッジするのに使用され、コア API を使用します。可能な場合は、Jakarta Messaging ブリッジの代わりにコアブリッジを使用してください。
JBoss EAP Jakarta Messaging ブリッジの設定例
<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>
上記の設定例では、Jakarta Messaging ブリッジは以下の 2 つの接続を作成するために connection-factory 属性を使用します。
- source-context: 受信メッセージの元の宛先を定義します。
- target-context: メッセージを受信するターゲット宛先を定義します。
Java Naming and Directory Interface (JNDI)を使用して接続ファクトリーを検索する Apache ActiveMQ Artemis または Red Hat AMQ によって提供されるデフォルトの実装を使用できます。他のアプリケーションサーバーまたは Jakarta Messaging プロバイダーの場合は、org.apache.activemq.artemis.jms.bridge.ConnectionFactoryFactory インターフェイスを実装して新しい実装を提供できます。
管理 CLI を使用した Jakarta Messaging ブリッジの追加
以下の管理 CLI コマンドを使用して Jakarta Messaging ブリッジを追加できます。ソースとターゲットの宛先が設定にすでに定義されている必要があることに注意してください。設定可能な属性の完全なリストは、付録の表 を参照してください。
/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 コマンドを使用して Jakarta Messaging ブリッジの設定を確認できます。
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:read-resource
以下の例にあるように、write-attribute を使用して Jakarta Messaging ブリッジに設定を追加します。
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:write-attribute(name=ATTRIBUTE,value=VALUE)
管理コンソールを使用した Jakarta Messaging ブリッジの追加
以下の手順に従うことで、管理コンソールを使用して Jakarta Messaging ブリッジを追加することもできます。
-
ブラウザーで管理コンソールを開き、設定
サブシステム Messaging (ActiveMQ) JMS ブリッジに移動します。 - 追加 (+) ボタンをクリックし、プロンプトが表示されたら必要な情報を入力します。
- 終了したら 追加 をクリックします。
27.1. サービス品質 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP の quality-of-service は、メッセージが消費され、確認応答される方法を決定する設定可能な属性です。quality-of-service の有効な値とその説明を以下に示します。Jakarta Messaging ブリッジ属性の完全なリストは、table in the appendix を参照してください。
- AT_MOST_ONCE
メッセージはソースから宛先に最大 1 回到達します。メッセージはソースから消費され、確認応答された後、宛先に送信されます。そのため、ソースで削除され、宛先に到達するまでの間に障害が発生した場合に、メッセージが失われる可能性があります。このモードはデフォルト値です。
このモードは永続メッセージと非永続メッセージの両方に使用できます。
- DUPLICATES_OK
メッセージは、宛先に正常に送信された後、ソースから消費され、確認応答されます。そのため、最初のメッセージが送信された後で、確認応答される前にエラーが発生した場合、メッセージを再送信できる可能性があります。
このモードは永続メッセージと非永続メッセージの両方に使用できます。
- ONCE_AND_ONLY_ONCE
メッセージはソースから宛先に 1 回のみ到達します。ソースと宛先の両方が同じサーバーインスタンスにある場合は、同じローカルトランザクションでメッセージを送信して確認応答することで、これを実現できます。ソースと宛先が異なるサーバー上にある場合は、Jakarta Transactions で送信セッションと消費セッションを登録することで実現されます。トランザクションはトランザクションマネージャーによって制御されます。これは、ブリッジで
setTransactionManager()メソッドを使用して設定する必要があります。このモードは永続メッセージのみに使用できます。
警告quality-of-service属性がONCE_AND_ONLY_ONCEに設定されているデプロイ済みの Jakarta Messaging ブリッジを持つサーバーをシャットダウンする場合は、予期しないエラーを防ぐために、Jakarta Messaging ブリッジを持つサーバーを最初にシャットダウンするようにしてください。
ONCE_AND_ONLY_ONCE ではなく DUPLICATES_OK モードを使用し、宛先で重複を確認して破棄することにより、1 回限りのセマンティクスを提供できる可能性があります。詳細は、重複メッセージ検出の設定 を参照してください。ただし、キャッシュは一定期間のみ有効になります。そのため、このアプローチは ONCE_AND_ONLY_ONCE を使用するほどは完璧ではありませんが、特定のアプリケーションのニーズによっては適切な選択肢となる可能性があります。