0

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

错误 2016-03-11 14:00:24,168 [Active_MQ.scheduler.04] org.mule.exception.CatchMessagingExceptionStrategy: ************************ ****************************************************** ****** 消息:事务已被标记为仅回滚 (bitronix.tm.internal.BitronixRollbackException) 类型
:org.mule.api.transaction.TransactionException 代码
:MULE_ERROR--2 JavaDoc: http://www.mulesoft .org/docs/site/current3/apidocs/org/mule/api/transaction/TransactionException.html **************************** ****************************************************** ** 异常堆栈为:1. 事务已被标记为仅回滚 (bitronix.tm.internal.BitronixRollbackException)
bitronix.tm.BitronixTransaction:116 (null) 2. 事务已被标记为仅回滚 (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) ************************************************* ******************************* 根异常堆栈跟踪:bitronix.tm.internal.BitronixRollbackException:事务已被标记为回滚仅在 org.mule.transaction.XaTransaction.enlistResource(XaTransaction. java:311) 在 com.mulesoft.mule.bti.jms.BitronixSessionInvocationHandler.enlist(BitronixSessionInvocationHandler.java:110) 在 sun.reflect.GeneratedMethodAccessor123.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) 在 com.mulesoft.mule.bti.jms 的 java.lang.reflect.Method.invoke(Method.java:606)。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) 在 org.mule.transport.jms.transformers.AbstractJmsTransformer.getSession(AbstractJmsTransformer.java:199) 在 org.mule.transport.jms.transformers.AbstractJmsTransformer.transformToMessage(AbstractJmsTransformer.java:65) ) 在 org.mule.transport.jms.transformers.ObjectToJMSMessage.transformMessage(ObjectToJMSMessage.java:54) 在 org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:141) 在 org.mule.transformer.AbstractMessageTransformer.transform( AbstractMessageTransformer.java:89) 在 org.mule.DefaultMuleMessage.transformMessage(DefaultMuleMessage.java:1602) 在 org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:1509) 在 org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1487) 在 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) 在 org.mule.transport.AbstractConnector$DispatcherMessageProcessor.process(AbstractConnector.java:2662) 在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor。在 org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 在 org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:107) 执行(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 在 org.mule.processor.BlockingProcessorExecutor .executeNext(BlockingProcessorExecutor.java:94) 在 org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:56) 在 org.mule.processor.AsyncInterceptingMessageProcessor.process(AsyncInterceptingMessageProcessor.java:102) 在 org.mule.execution。 org.mule.execution.MessageProcessorNotificationExecutionInterceptor 的 ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24)。在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 的 org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 处执行(MessageProcessorNotificationExecutionInterceptor.java:107) 在 org.mule.execution.MessageProcessorNotificationExecutionInterceptor .execute(MessageProcessorNotificationExecutionInterceptor.java:107) 在 org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 在 org.mule.execution。 MessageProcessorNotificationExecutionInterceptor。在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 在 org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 在 org.mule.execution.MessageProcessorExecutionTemplate 执行(MessageProcessorNotificationExecutionInterceptor.java:107)在 org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:56) 在 org.mule.endpoint 的 org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:94) 的 .execute(MessageProcessorExecutionTemplate.java:44)。 outbound.OutboundResponsePropertiesMessageProcessor.process(OutboundResponsePropertiesMessageProcessor.java:35) 在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor。在 org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.ja...执行(ExceptionToMessagingExceptionExecutionInterceptor.java:24)

4

1 回答 1

0

我假设您的消息处理是成功的(它没有抛出任何异常)。因此,一个潜在的原因可能是交易超时。我建议您启用 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 超时。

于 2016-03-12T18:51:02.753 回答