5.6. JMS
メッセージングのサポートは、JBoss EAP Messaging (ActiveMQ Artemis) サブシステムと統合する JMS コンポーネントを介して提供されます。
他の JMS 実装とのインテグレーションは、ベンダー固有のリソースアダプターを設定するか、使用できない場合は JBoss Generic JMS リソースアダプターを使用して行うことができます。
5.6.1. JBoss EAP JMS の設定 リンクのコピーリンクがクリップボードにコピーされました!
標準の JBoss EAP XML 設定ファイルを介して JBoss EAP の メッセージングサブシステム を設定できます例: standalone.xml ファイル
以下の例では、メモリーインスタンスに埋め込まれた ActiveMQ Artemis を使用します。最初に以下の XML 設定を jms-destinations セクションに追加して、メッセージングサブシステムに新しい JMS キューを設定します。
<jms-queue name="WildFlyCamelQueue"> <entry name="java:/jms/queue/WildFlyCamelQueue"/> </jms-queue>
<jms-queue name="WildFlyCamelQueue">
<entry name="java:/jms/queue/WildFlyCamelQueue"/>
</jms-queue>
あるいは、CLI スクリプトを使用してキューを追加することもできます。
jms-queue add --queue-address=WildFlyCamelQueue --entries=queue/WildFlyCamelQueue,java:/jms/queue/WildFlyCamelQueue
$ jms-queue add --queue-address=WildFlyCamelQueue --entries=queue/WildFlyCamelQueue,java:/jms/queue/WildFlyCamelQueue
また、カスタム jms.xml デプロイメント記述子内に messaging-deployment
設定を作成することもできます。詳細は、JBoss EAP メッセージングサブシステムのドキュメントの 'Deployment of -jms.xml files' セクションを参照してください。
5.6.2. Camel ルートの設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の JMS プロデューサーおよびコンシューマーの例では、JBoss EAP の組み込み ActiveMQ Artemis サーバーを使用して、宛先との間でメッセージを公開および消費します。
この例では、camel-cdi コンポーネントと共に CDI も使用します。JMS ConnectionFactory インスタンスは、JNDI ルックアップを介して Camel RouteBuilder に注入されます。
5.6.2.1. JMS プロデューサー リンクのコピーリンクがクリップボードにコピーされました!
DefaultJMSConnectionFactory
接続ファクトリーは、JNDI から RouteBuilder に注入されます。メッセージングサブシステム内の JBoss EAP XML 設定に、接続ファクトリーがあります。
次に、タイマーエンドポイントが 10 秒ごとに実行され、以前に設定した WildFlyCamelQueue 宛先に XML ペイロードを送信します。
JMS メッセージが WildFlyCamelQueue 宛先に追加されるたびに、ログメッセージがコンソールに出力されます。メッセージが実際にキューに配置されていることを確認するには、JBoss EAP 管理コンソールを使用できます。
5.6.2.2. JMS コンシューマー リンクのコピーリンクがクリップボードにコピーされました!
JMS メッセージを消費するため、Camel RouteBuilder 実装はプロデューサーの例と似ています。
前述のように、接続ファクトリーは JNDI から検出され、JMSComponent インスタンスに注入され設定されます。
JMS エンドポイントが WildFlyCamelQueue 宛先からのメッセージを消費すると、内容がコンソールに記録されます。
5.6.2.3. JMS トランザクション リンクのコピーリンクがクリップボードにコピーされました!
Camel JMS ルートが JMS トランザクションに参加できるようにするには、追加の設定が必要になります。camel-jms は spring-jms を中心に構築されているため、JBoss EAP のトランザクションマネージャーおよび接続ファクトリーと連携できるようにいくつかの Spring クラスを設定する必要があります。以下のコード例は、CDI を使用してトランザクション JMS Camel ルートを設定する方法を示しています。
camel-jms コンポーネントには、タイプ org.springframework.transaction.PlatformTransactionManager
トランザクションマネージャーが必要です。そのため、JtaTransactionManager
を拡張する Bean の作成から開始します。Bean には @Named
アノテーションが付けられており、Camel Bean レジストリー内に Bean を登録できることに注意してください。また、JBoss EAP トランザクションマネージャーとユーザートランザクションインスタンスは CDI を使用して注入されることにも注意してください。
次に、使用するトランザクションポリシーを宣言する必要があります。ここでも、@Named
アノテーションを使用して Bean を Camel で利用可能にします。また、トランザクションマネージャーも、必要なトランザクションポリシーで TransactionTemplate を作成できるように注入されます(ここでは PROPAGATION_REQUIRED)。
これで、Camel RouteBuilder クラスを設定し、Camel JMS コンポーネントに必要な依存関係を注入できるようになりました。JBoss EAP XA 接続ファクトリーは、以前に設定されたトランザクションマネージャーとともに注入されます。
この例の RouteBuilder では、queue1 から任意のメッセージが消費されるたびに、メッセージは queue2 という名前の別の JMS キューにルーティングされます。queue2 から消費されるメッセージにより、rollback() DSL メソッドを使用して JMS トランザクションがロールバックされます。これにより、元のメッセージがデッドレターキュー (DLQ) に配置されます。
5.6.2.4. リモート JMS 宛先 リンクのコピーリンクがクリップボードにコピーされました!
ある JBoss EAP インスタンスが リモート JNDI を使用して別の JBoss EAP インスタンスに設定された ActiveMQ Artemis 宛先にメッセージを送信することができます。
これには、追加の JBoss EAP 設定が必要です。最初に、エクスポートされた JMS キューが設定されます。
java:jboss/exported
namespace でバインドされた JNDI 名のみがリモートクライアントの候補として考慮されるため、キューには適切な名前が付けられます。
JBoss EAP クライアントアプリケーションサーバー およびJBoss EAP リモートサーバーでキューを設定する必要があります。
<jms-queue name="RemoteQueue"> <entry name="java:jboss/exported/jms/queues/RemoteQueue"/> </jms-queue>
<jms-queue name="RemoteQueue">
<entry name="java:jboss/exported/jms/queues/RemoteQueue"/>
</jms-queue>
クライアントがリモートサーバーに接続できるようにするには、ユーザーアクセスクレデンシャルを設定する必要があります。リモートサーバーで add user utility を実行し、guest グループ内に新しいアプリケーションユーザーを作成します。この例には、名前が admin でパスワードが secret のユーザーがいます。
RouteBuilder の実装は、前述の例とは異なります。接続ファクトリーを注入する代わりに、InitialContext を設定し、JNDI 自体から取得する必要があります。
configureInitialContext
メソッドはこの InitialContext を作成します。リモート JBoss EAP インスタンスのホスト名とポート番号を参照するプロバイダー URL を設定する必要があります。この例では JBoss EAP JMS http-connector を使用していますが、ここ に記載されている代替手段があります。
最後に、ルートは、前項で定義されたリモート宛先 ('RemoteQueue') に 10 秒ごとに XML ペイロードを送信するように設定されます。
5.6.3. セキュリティー リンクのコピーリンクがクリップボードにコピーされました!
JMS のセキュリティー セクションを参照してください。
5.6.4. Fuse on EAP のクイックスタートの例 リンクのコピーリンクがクリップボードにコピーされました!
クイックスタートの例は、quickstarts/camel/camel-jms
ディレクトリーの Fuse on EAP インストールで利用できます。