2.57. JMS
JMS Queue または Topic との間でメッセージを送受信します。
2.57.1. 含まれるもの リンクのコピーリンクがクリップボードにコピーされました!
-
JMS コンポーネント、URI 構文:
jms:destinationType:destinationName
使用方法と設定の詳細は、上記リンクを参照してください。
2.57.2. Maven コーディネート リンクのコピーリンクがクリップボードにコピーされました!
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jms</artifactId>
</dependency>
2.57.3. 使用方法 リンクのコピーリンクがクリップボードにコピーされました!
2.57.3.1. org.w3c.dom.Node を使用したメッセージマッピング リンクのコピーリンクがクリップボードにコピーされました!
Camel JMS コンポーネントは、jakarta.jms.Message および org.apache.camel.Message 間のメッセージマッピングをサポートします。Camel メッセージ本文タイプ org.w3c.dom.Node を変換する場合は、camel-quarkus-xml-jaxp エクステンションがクラスパスに存在することを確認する必要があります。
2.57.3.2. jakarta.jms.ObjectMessage のネイティブモードのサポート リンクのコピーリンクがクリップボードにコピーされました!
JMS メッセージペイロードを jakarta.jms.ObjectMessage として送信する場合、シリアル化のために登録する関連クラスに @RegisterForReflection(serialization = true) でアノテーションを付ける必要があります。このエクステンションは、quarkus.camel.native.reflection.serialization-enabled = true を自動的に設定することに注意してください。詳細は、ネイティブモード のユーザーガイドを参照してください。
2.57.3.3. 接続プーリングと X/Open XA 分散トランザクションのサポート リンクのコピーリンクがクリップボードにコピーされました!
接続プールは、{project-name} のこのリリースのテクニカルプレビュー機能です。
camel-quarkus-jms コンポーネントで接続プールを使用するには、io.quarkiverse.artemis:quarkus-artemis および io.quarkiverse.messaginghub:quarkus-pooled-jms を pom.xml に追加し、次の設定を指定する必要があります。
quarkus.pooled-jms.max-connections = 8
quarkus.pooled-jms.max-connections = 8
quarkus-pooled-jms エクステンションを使用して、JMS 接続のプーリングと XA のサポートを得ることができます。詳細は、quarkus-pooled-jms エクステンションドキュメントを参照してください。現在、このエクステンションは、quarkus-artemis-jms、quarkus-qpid-jms、および ibmmq-client で使用できます。依存関係を pom.xml に追加するだけです。
<dependency>
<groupId>io.quarkiverse.messaginghub</groupId>
<artifactId>quarkus-pooled-jms</artifactId>
</dependency>
<dependency>
<groupId>io.quarkiverse.messaginghub</groupId>
<artifactId>quarkus-pooled-jms</artifactId>
</dependency>
プーリングはデフォルトで有効になっています。
プーリング接続では、clientID と durableSubscriptionName はサポートされていません。プールから reused された接続で setClientID が呼び出されると、IllegalStateException が出力されます。次のようなエラーメッセージが表示されます。Cause: setClientID can only be called directly after the connection is created
XA を有効にするには、quarkus-narayana-jta エクステンションを追加する必要があります。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-narayana-jta</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-narayana-jta</artifactId>
</dependency>
続いて、次の設定を application.properties に追加します。
quarkus.pooled-jms.transaction=xa quarkus.transaction-manager.enable-recovery=true
quarkus.pooled-jms.transaction=xa
quarkus.transaction-manager.enable-recovery=true
XA サポートは、quarkus-artemis-jms および ibmmq-client でのみ利用可能です。また、トランザクション回復を有効にすることを強く推奨します。
現在、ibmmq-client 用の quarkus エクステンションがないため、カスタムの ConnectionFactory を作成し、自分でラップする必要があります。以下に例を示します。
ibmmq-client を使用してメッセージを消費し、XA を有効にする場合は、次のように camel ルートで TransactionManager を設定する必要があります。
そうでない場合は、MQRC_SYNCPOINT_NOT_AVAILABLE のような例外が発生します。
ibmmq-client を使用してトランザクションをロールバックすると、次のような WARN メッセージが表示されます。
WARN [com.arj.ats.jta] (executor-thread-1) ARJUNA016045: attempted rollback of < formatId=131077, gtrid_length=35, bqual_length=36, tx_uid=0:ffffc0a86510:aed3:650915d7:16, node_name=quarkus, branch_uid=0:ffffc0a86510:aed3:650915d7:1f, subordinatenodename=null, eis_name=0 > (com.ibm.mq.jmqi.JmqiXAResource@79786dde) failed with exception code XAException.XAER_NOTA: javax.transaction.xa.XAException: The method 'xa_rollback' has failed with errorCode '-4'.
WARN [com.arj.ats.jta] (executor-thread-1) ARJUNA016045: attempted rollback of < formatId=131077, gtrid_length=35, bqual_length=36, tx_uid=0:ffffc0a86510:aed3:650915d7:16, node_name=quarkus, branch_uid=0:ffffc0a86510:aed3:650915d7:1f, subordinatenodename=null, eis_name=0 > (com.ibm.mq.jmqi.JmqiXAResource@79786dde) failed with exception code XAException.XAER_NOTA: javax.transaction.xa.XAException: The method 'xa_rollback' has failed with errorCode '-4'.
it may be ignored and can be assumed that MQ has discarded the transaction's work. Refer to https://access.redhat.com/solutions/1250743[Red Hat Knowledgebase] for more information.
it may be ignored and can be assumed that MQ has discarded the transaction's work. Refer to https://access.redhat.com/solutions/1250743[Red Hat Knowledgebase] for more information.
2.57.4. ネイティブモードの transferException オプション リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードで transferException オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモード のユーザーガイドを参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)