将 jms 发送到 activemq MuleESB 时出现 Bitronix 异常

Bitronix exceptions when sending jms to activemq MuleESB

我正在开发一个 MuleESB 项目,我从 ActiveMQ 接收消息,其中包含以 Base64 编码的图片,当我处理完消息后,我尝试将它发送到另一个队列,但随后出现以下错误. 有谁知道为什么会发生这种异常:

ERROR 2016-03-11 14:00:24,168 [Active_MQ.scheduler.04] org.mule.exception.CatchMessagingExceptionStrategy: ******************************************************************************** Message : transaction has been marked as rollback only (bitronix.tm.internal.BitronixRollbackException) Type
: org.mule.api.transaction.TransactionException Code
: MULE_ERROR--2 JavaDoc : http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transaction/TransactionException.html ******************************************************************************** Exception stack is: 1. transaction has been marked as rollback only (bitronix.tm.internal.BitronixRollbackException)
bitronix.tm.BitronixTransaction:116 (null) 2. transaction has been marked as rollback only (bitronix.tm.internal.BitronixRollbackException) (org.mule.api.transaction.TransactionException)
org.mule.transaction.XaTransaction:315 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transaction/TransactionException.html) ******************************************************************************** Root Exception stack trace: bitronix.tm.internal.BitronixRollbackException: transaction has been marked as rollback only at bitronix.tm.BitronixTransaction.enlistResource(BitronixTransaction.java:116) at com.mulesoft.mule.bti.transaction.TransactionWrapper.enlistResource(TransactionWrapper.java:53) at org.mule.transaction.XaTransaction.enlistResource(XaTransaction.java:311) at com.mulesoft.mule.bti.jms.BitronixSessionInvocationHandler.enlist(BitronixSessionInvocationHandler.java:110) at sun.reflect.GeneratedMethodAccessor123.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.mulesoft.mule.bti.jms.BitronixSessionInvocationHandler.invoke(BitronixSessionInvocationHandler.java:54) at com.sun.proxy.$Proxy116.enlist(Unknown Source) at org.mule.transaction.XaTransaction.bindResource(XaTransaction.java:287) at org.mule.transport.AbstractConnector.getTransactionalResource(AbstractConnector.java:2041) at org.mule.transport.jms.transformers.AbstractJmsTransformer.getSession(AbstractJmsTransformer.java:199) at org.mule.transport.jms.transformers.AbstractJmsTransformer.transformToMessage(AbstractJmsTransformer.java:65) at org.mule.transport.jms.transformers.ObjectToJMSMessage.transformMessage(ObjectToJMSMessage.java:54) at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:141) at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:89) at org.mule.DefaultMuleMessage.transformMessage(DefaultMuleMessage.java:1602) at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:1509) at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1487) at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1470) at org.mule.transport.AbstractMessageDispatcher.applyOutboundTransformers(AbstractMessageDispatcher.java:205) at org.mule.transport.jms.JmsMessageDispatcher.applyOutboundTransformers(JmsMessageDispatcher.java:506) at org.mule.transport.AbstractMessageDispatcher.process(AbstractMessageDispatcher.java:71) at org.mule.transport.AbstractConnector$DispatcherMessageProcessor.process(AbstractConnector.java:2662) at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:107) at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:94) at org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:56) at org.mule.processor.AsyncInterceptingMessageProcessor.process(AsyncInterceptingMessageProcessor.java:102) at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:107) at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:107) at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:107) at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:94) at org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:56) at org.mule.endpoint.outbound.OutboundResponsePropertiesMessageProcessor.process(OutboundResponsePropertiesMessageProcessor.java:35) at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.ja...

我假设您的消息处理成功(没有抛出任何异常)。因此,一个潜在的原因可能是交易超时。我建议您启用 bitronix 事务日志(可能通过将入站队列的并发接收者计数减少到一个,以便您的日志不那么混乱)。

另外,请回答以下问题:

1。所有消息都会出现此异常?还是间歇性的? 2.处理入站消息需要多长时间? 3.你的交易超时时间是多少? 4.您使用的是哪个版本的 Mule?

我问这个是因为我遇到过非常相似的事情并找到了根本原因。如果我能得到上述问题的答案,我可以在进一步的更新中更具体。

更新:

这很可能是根本原因。看看。

https://www.mulesoft.org/jira/browse/MULE-8964

更新

如果您的许可证是 EE,则可以在 v3.7.3 中修复该问题。这是他们为解决问题而添加的内容。

https://github.com/mulesoft/mule/commit/1b1bfafda3e8dc16b596a150fc2a8b518382cd20#diff-1

以下是问题摘要:

Mule 轮询 JMS 消息,轮询超时与配置的 xa 事务超时相同(默认值:60 秒)。 因此,轮询线程等待消息到达队列最多 60 秒。 XA 事务在轮询开始时开始。考虑轮询线程在非常接近轮询超时时收到消息的场景;说在第 59 秒(XA 事务在这里接近超时,因为它在启动轮询时开始)。如果消息处理再花费 5 秒,则 XA 事务的总时间将为 64 秒 (59 +5)。在处理完成之前,事务管理器终止了事务,因为它超过了 XA 超时。