java - 如何解决读取 MQ 消息导致提交/回滚错误的问题?
问题描述
在努力让 MQ 连接在 Liberty 中工作时,我遇到了以下问题。
收到消息后,出现以下错误: JMSCC0014: 在非事务会话上调用“提交”方法无效。
我做了一些搜索,发现需要使用连接工厂的 XA 版本,但我不知道这是否确实是解决方案,我还没有找到任何明确的例子来说明如何在配置中实现它我有。
这是 server.xml 配置的相关部分:
<resourceAdapter id="mqJms" location="/etc/liberty/wmq/wmq.jmsra.rar"/>
<authData id="mqJms.auth" user="user" password="password"/>
<jmsQueueConnectionFactory jndiName="jms/queueConnectionFactory" connectionManagerRef="ConMgr4" containerAuthDataRef="mqJms.auth">
<properties.mqJms transportType="CLIENT"
hostName="server" port="1234"
channel="CHANNEL"/>
</jmsQueueConnectionFactory>
<connectionManager id="ConMgr4"
connectionTimeout="30s"
maxPoolSize="50" minPoolSize="1"
reapTime="60s" agedTimeout="0"/>
<jmsQueue id="jms/incomingRequestQueue" jndiName="jms/incomingRequestQueue">
<properties.mqJms baseQueueName="QUEUEIN"/>
</jmsQueue>
queueConnectionFactory 是通过代码中的 JNDI 检索的。
任何帮助将不胜感激。
解决方案
解决方案最终是在收到 MQ 消息后不执行提交/回滚,有关更多信息,请参见此处:Websphere Liberty:JMS 会话不起作用。