java - 以 IBM MQ 为目标的 JMSBridge:JBOSS EAP 7.2
问题描述
我正在尝试在 JBOSS EAP jms 队列(AMQ)和 IBM MQ 之间建立一个 JMS 桥作为目的地。下面是我的 JMS 桥:
<jms-bridge name="my-jms-bridge" quality-of-service="AT_MOST_ONCE" failure-retry-interval="1000" max-retries="2" max-batch-size="10" max-batch-time="100">
<source connection-factory="java:/ConnectionFactory" destination="java:/jms/queue/bridgingQueue"/>
<target connection-factory="jms/mqSeriesJMSFactoryInboundQueue1" destination="jms/inboundQueue1"/>
</jms-bridge>
我在我的资源适配器中创建了 mqSeriesJMSFactoryInboundQueue1 和 inboundQueue1 作为连接工厂和管理对象,没有事务支持。
我可以向 AMQ 发布测试消息。但在控制台上低于 WARN:
WARN [org.apache.activemq.artemis.jms.bridge] (Thread-102) AMQ342009: JMS Bridge N/A failed to send + acknowledge batch, closing JMS objects: com.ibm.msg.client.jms.DetailedIllegalStateException: JMSCC0014: It is not valid to call the 'commit' method on a nontransacted session.
The application called a method that must not be called on a nontransacted session.
Change the application program to remove this behavior.
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at deployment.wmq.jmsra-9.2.2.0.rar//com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319)
at deployment.wmq.jmsra-9.2.2.0.rar//com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:226)
at deployment.wmq.jmsra-9.2.2.0.rar//com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:126)
at deployment.wmq.jmsra-9.2.2.0.rar//com.ibm.msg.client.jms.internal.JmsSessionImpl.commit(JmsSessionImpl.java:744)
at deployment.wmq.jmsra-9.2.2.0.rar//com.ibm.mq.jms.MQSession.commit(MQSession.java:294)
at deployment.wmq.jmsra-9.2.2.0.rar//com.ibm.mq.connector.outbound.SessionWrapper.commit(SessionWrapper.java:335)
at org.apache.activemq.artemis@2.6.3.redhat-00014//org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.sendBatchNonTransacted(JMSBridgeImpl.java:1338)
at org.apache.activemq.artemis@2.6.3.redhat-00014//org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.sendBatch(JMSBridgeImpl.java:1298)
at org.apache.activemq.artemis@2.6.3.redhat-00014//org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.access$1700(JMSBridgeImpl.java:74)
at org.apache.activemq.artemis@2.6.3.redhat-00014//org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl$BatchTimeChecker.run(JMSBridgeImpl.java:1825)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我是否缺少任何配置,或者是否有任何资源适配器的属性我应该覆盖以停止提交消息
解决方案
在非事务会话上调用“提交”方法是无效的。
错误消息非常清楚,不要在未处理的会话(即工作单元)上使用提交。
推荐阅读
- python - `eli5.show_weights` 显示的标准偏差与 `feature_importances_std_` 中的值不符
- java - 如何将文本从内部类附加到 jTextArea?
- javascript - 单独按不同表格的表格标题排序
- java - 如何从过滤器访问应用程序配置文件?
- go - 如何暂停和恢复 goroutine?
- sql - SQL 中的小于号除了作为运算符之外还有其他用途吗?
- ruby-on-rails - Mongoid 1.month.ago 将在 3 月 1 日返回 01
- python - 使用 CountVectorizer 时如何忽略以克为单位的单词位置?
- python - 如何获取显示器的型号和序列号?
- python - 计算两列上的重复项并将值添加为新列