Apache camel 骆驼事务:每次提交时MQ会话关闭

Apache camel 骆驼事务:每次提交时MQ会话关闭,apache-camel,ibm-mq,Apache Camel,Ibm Mq,我有: 驼峰路由(Transact=true),从MQ队列消耗 使用Spring的WebSphereUowTransactionManager 事务性工作 在IBM Liberty上运行 但是,我得到了这个信息: Setup of JMS message listener invoker failed for destination 'MY.QUEUE' - trying to recover. Cause: Local JMS transaction failed to commit;

我有:

  • 驼峰路由(Transact=true),从MQ队列消耗
  • 使用Spring的WebSphereUowTransactionManager
  • 事务性工作
  • 在IBM Liberty上运行
但是,我得到了这个信息:

Setup of JMS message listener invoker failed for destination 'MY.QUEUE' - trying to recover. 
Cause: Local JMS transaction failed to commit; nested exception is com.ibm.msg.client.jms.DetailedIllegalStateException: 
MQJCA1020: The session is closed.
The application attempted to use a JMS session after it had closed the session.
Modify the application so that it closes the JMS session only after it has finished using the session.

这似乎与此相关,但我尝试在server.xml中更改配置,但没有成功。

您可以尝试设置
cacheLevelName=CACHE\u CONSUMER
,这允许重用JMS CONSUMER,并避免无休止地创建/销毁JMS资源,错误消息可能就是原因


您可以在Camel JMS文档中看到有关缓存级别重要性的更多信息:

您可以尝试设置cacheLevelName=cache\u CONSUMER.Darius,对Claus Ibsen的建议有何反馈?你能展示一下你的骆驼路线吗?@JoshMc,是的,我刚试过,效果不错。我使用了CACHE_NONE,因为我不知道其他选项是否能正确处理事务(我使用的是Spring的WebSphereUowTransactionManager)@ClausIbsen应该写一个答案,你也可以接受并奖励赏金。更新:我们实际上无法让CACHE_消费者正确处理事务,等等,切换回CACHE_None值得注意的是,当CACHE_CONSUMER在正常的非错误条件下回答这个问题时,我遇到了这样一种情况:当使用事务和CACHE_CONSUMER时,在CONSUMER中抛出了一个异常,侦听器似乎只是停止侦听:不会使用其他队列消息。更改为CACHE_连接似乎解决了这一问题,从而使使用者在出现错误后继续运行。我不知道使用CACHE\u连接而不是CACHE\u消费者在常规非错误条件下会损失什么。