【问题标题】:Bitronix exceptions when sending jms to activemq MuleESB将 jms 发送到 activemq MuleESB 时出现 Bitronix 异常
【发布时间】:2016-06-26 18:12:37
【问题描述】:

我正在开发一个 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(空) 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:交易已 仅在标记为回滚 bitronix.tm.BitronixTransaction.enlistResource(BitronixTransaction.java:116) 在 com.mulesoft.mule.bti.transaction.TransactionWrapper.enlistResource(TransactionWrapper.java:53) 在 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) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 com.mulesoft.mule.bti.jms.BitronixSessionInvocationHandler.invoke(BitronixSessionInvocationHandler.java:54) 在 com.sun.proxy.$Proxy116.enlist(未知来源) org.mule.transaction.XaTransaction.bindResource(XaTransaction.java:287) 在 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) 在 org.mule.transport.AbstractMessageDispatcher.applyOutboundTransformers(AbstractMessageDispatcher.java:205) 在 org.mule.transport.jms.JmsMessageDispatcher.applyOutboundTransformers(JmsMessageDispatcher.java:506) 在 org.mule.transport.AbstractMessageDispatcher.process(AbstractMessageDispatcher.java:71) 在 org.mule.transport.AbstractConnector$DispatcherMessageProcessor.process(AbstractConnector.java:2662) 在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 在 org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:107) 在 org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 在 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.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 在 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.execute(MessageProcessorNotificationExecutionInterceptor.java:107) 在 org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 在 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.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 在 org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:94) 在 org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:56) 在 org.mule.endpoint.outbound.OutboundResponsePropertiesMessageProcessor.process(OutboundResponsePropertiesMessageProcessor.java:35) 在 org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 在 org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.ja...

【问题讨论】:

    标签: mule activemq esb bitronix


    【解决方案1】:

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

    【讨论】:

    • 这个异常是随机发生的,但主要是在我处于调试模式时。我没有设置事务超时时间,所以根据docs.mulesoft.com/mule-user-guide/v/3.5/…,它应该是默认的60秒。如果我想设置它,它是通过在独立版本中配置 wrapper.conf 文件来完成的,但是对于 Anypoint Studio,我该怎么做(如果你熟悉它?它只是 muleesb 的一个 Eclipse 扩展)。处理包含图片的消息最多需要几秒钟。骡子版本 3.7.0。 @jivi
    • 它发生在 jms 连接上,通常在出站端点上。因此,我尝试将所有入站端点标记为“ALWAYS_BEGIN”,将出站端点标记为“ALWAYS_JOIN”。但这没有帮助。
    • 这很可能是根本原因。看一看。 mulesoft.org/jira/browse/MULE-8964 我已经更新了主线程的更多细节。希望对你有帮助
    • 好的,非常感谢,它看起来有助于升级到 3.7.3,但现在我遇到了另一个错误,即 <property key="xaPollingTimeout" value="10000"/> 我的工作室说“Element: property is not allowed元素 JMS 的子元素,根据stackoverflow.com/questions/17224946/…,这是旧版本 mule 的问题,尚未解决。你知道吗?
    • 我猜运行时应该仍然可以工作。忽略警告并尝试在您的独立实例中运行应用程序存档。
    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多