【问题标题】:Mule not rolling back JMS message on Openwire connected ActiveMQ queueMule 未在 Openwire 连接的 ActiveMQ 队列上回滚 JMS 消息
【发布时间】:2017-08-22 21:12:52
【问题描述】:

我们有一个场景,我们使用 Mule(版本 3.4 - 我知道)在捕获异常后回滚 JMS 事务。 ActiveMQ 应该将消息保留在队列中(以使其持久化)直到事务提交,或者在 Mule 发起回滚后根据回滚设置重新传递。

但是,在回滚之后,消息似乎没有重新传递,而是位于队列连接上,“阻止”了更多消息。就好像没有收到回滚消息一样。有谁知道为什么这不会被退回?

从日志中提取:

2017-03-29 11:23:26,345 [Session Task-16] DEBUG SingleResourceCollectionTransaction - Rolling back a transaction collection in the following order: [org.mule.transport.jms.JmsTransaction@bea1685a-1469-11e7-9d1d-5ba5419e6645[status=STATUS_MARKED_ROLLBACK, key=ActiveMQConnection {id=ID:serveradd-50176-1490782511241-3:1,clientId=ID:serveradd-50176-1490782511241-2:1,started=false}, resource=org.mule.transport.jms.ReusableTopicSessionWrapper@c2149e58]]
2017-03-29 11:23:26,345 [Session Task-16] DEBUG SingleResourceCollectionTransaction - Rolling back transaction
2017-03-29 11:23:26,345 [Session Task-16] DEBUG g.mule.transport.jms.JmsTransaction - Rolling back transaction
2017-03-29 11:23:26,345 [Session Task-16] DEBUG g.mule.transport.jms.JmsTransaction - Rolling back transaction: bea1685a-1469-11e7-9d1d-5ba5419e6645
2017-03-29 11:23:26,345 [Session Task-16] DEBUG org.apache.activemq.ActiveMQSession - ID:serveradd-50176-1490782511241-3:1:6 Transaction Rollback, txid:TX:ID:serveradd-50176-1490782511241-3:1:21
2017-03-29 11:23:26,345 [Session Task-16] DEBUG .apache.activemq.TransactionContext - Rollback: TX:ID:serveradd-50176-1490782511241-3:1:21 syncCount: 1
2017-03-29 11:23:26,346 [Session Task-16] DEBUG transaction.TransactionCoordination - Unbinding transaction (14) com.mulesoft.mule.transaction.SingleResourceCollectionTransaction@bea11a39-1469-11e7-9d1d-5ba5419e6645[status=STATUS_ROLLEDBACK, key=null, resource=null]
2017-03-29 11:23:26,346 [Session Task-16] DEBUG n.InterceptingChainLifecycleWrapper - Invoking InterceptingChainLifecycleWrapper 'wrapper for null' 
[ 
  org.mule.api.processor.LoggerMessageProcessor@7e9d1d0b
] with event MuleEvent: 0-bea2c7f2-1469-11e7-9d1d-5ba5419e6645, stop processing=false, jms://myQueue
2017-03-29 11:23:26,347 [Session Task-16] DEBUG .chain.DefaultMessageProcessorChain - Invoking DefaultMessageProcessorChain '(inner iterating chain) of null' 
[ 
  org.mule.api.processor.LoggerMessageProcessor@7e9d1d0b
] with event MuleEvent: 0-bea2c7f2-1469-11e7-9d1d-5ba5419e6645, stop processing=false, jms://myQueue
2017-03-29 11:23:26,347 [Session Task-16] INFO  pi.processor.LoggerMessageProcessor - Rolling back...
2017-03-29 11:23:26,347 [Session Task-16] DEBUG .support.DefaultListableBeanFactory - Returning cached instance of singleton bean '_muleStreamCloserService'
2017-03-29 11:23:26,347 [Session Task-16] DEBUG .support.DefaultListableBeanFactory - Returning cached instance of singleton bean '_muleStreamCloserService'
2017-03-29 11:23:26,347 [Session Task-16] DEBUG ule.util.DefaultStreamCloserService - Unable to find an StreamCloser for the stream type: class net.MyBean, the stream: net.MyBean@e341f050 will not be closed.

【问题讨论】:

    标签: java jms mule activemq


    【解决方案1】:

    我没有关于 Mule 的工作知识,但是,由于它是 JMS/J2EE,我会检查 mule 队列的重新交付选项。它有一个属性可以在将失败消息发送到死信队列之前进行 N 次尝试(我知道 activemq 有它)。

    【讨论】:

    • 您好,感谢您的回复,我们已将重新投递尝试设置为 10。消息在第一次回滚时卡住 - 队列似乎没有收到回滚消息,只是处于连接状态,阻止其他消息消费。
    • @Davos555 尝试重新交付时,您是否在 MDB 中进行事务处理?如果没有,请尝试在容器管理的事务中。
    • @Davos555 看起来您确实在进行交易。这太奇怪了,您可以发布使用该消息的代码吗?
    • 你好宙斯。是的,容器管理的事务确实有效。我们想要消息代理提供的持久性。我会尽可能发布代码。
    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2014-04-03
    • 2019-08-18
    • 2018-12-20
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多