【问题标题】:HornetQ timed out rollback leaves messages in DeliveringCountHornetQ 超时回滚在 DeliveringCount 中留下消息
【发布时间】:2015-06-18 18:51:59
【问题描述】:

我们有一个应用程序,它对hornetq 消息进行一些非常动态的路由,因此它在单个事务会话中从一个队列读取并写入另一个队列。这个想法是,如果我们不能移动到目标队列,我们​​不会将其从原始队列中删除。在我们对网络延迟进行一些测试之前,它工作正常——事情开始分崩离析。

由于延迟,交易无法提交也无法回滚。我们看到数千条消息卡在deliverycount 中,即使在 20 分钟后也无法清除。我们将连接工厂的调用超时保留为默认值 - 为 30 秒。该应用程序有大约 10 个实例为 8 个不同的目标队列提供服务,因此您可能会认为,如果按顺序进行交付,我们不会看到 80 多个文件卡在 deliveringcount 中,但我们确实看到的远不止这些。

仅当应用关闭或我们终止并重新启动会话时,这些文件才会从 deliveringCount 中删除。

似乎 HornetQ 无法使事务超时(您可能认为调用超时可以解决问题)并从 deliveringcount 中删除这些文件。

有什么我们应该看的属性吗?我一直在寻找事务超时,但它仅适用于我们不使用的 XA 事务

顺便说一句,我们使用messagelistener 来接收消息。

这是我们在回滚超时时遇到的错误(提交时也有类似的超时错误):

javax.jms.JMSException: HQ119014: Timed out waiting for response when sending packet 68
    at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:379)
    at org.hornetq.core.client.impl.ClientSessionImpl.stop(ClientSessionImpl.java:726)
    at org.hornetq.core.client.impl.ClientSessionImpl.stop(ClientSessionImpl.java:712)
    at org.hornetq.core.client.impl.ClientSessionImpl.rollback(ClientSessionImpl.java:617)
    at org.hornetq.core.client.impl.ClientSessionImpl.rollback(ClientSessionImpl.java:597)
    at org.hornetq.core.client.impl.DelegatingSession.rollback(DelegatingSession.java:479)
    at org.hornetq.jms.client.HornetQSession.rollback(HornetQSession.java:250)
    at comms.HQRouter.MessageMover$MessageListenerImpl.onMessage(MessageMover.java:185)
    at org.hornetq.jms.client.JMSMessageListenerWrapper.onMessage(JMSMessageListenerWrapper.java:98)
    at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1085)
    at org.hornetq.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:57)
    at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1220)
    at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:106)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: HornetQException[errorType=CONNECTION_TIMEDOUT message=HQ119014: Timed out waiting for response when sending packet 68]
    ... 16 more

【问题讨论】:

  • 版本?我们已经修复了一些会导致这种情况发生的错误...提供我有关问题的版本,我会检查修复并给你一个正确的答案
  • 版本为 2.3.0.final
  • 自 2.3.0 以来有几个修复。您应该考虑尝试更新的版本。

标签: transactions timeout hornetq


【解决方案1】:

HornetQ 在 2.3.0 之后修复了一些错误。你应该试试它的最新版本。

我相信这个问题会在以后的版本中得到解决,但如果不是这种情况,您应该提供一个复制此问题的测试并提出一个论坛帖子,或者如果您绝对确定您已经在最新版本的测试中复制了该问题您应该在 HornetQ 项目的 JBoss JIRA 上打开一个错误修复请求。

【讨论】:

  • 我会用最新的 hornetq 2.4.0 试试这个,它似乎是最新的稳定版本。
  • @clebert,我的版本是 2.2.5,遇到同样的问题,请帮助如何升级到 2.4.0
  • 您应该移至 ActiveMQ Artemis,因为该项目已作为 Activemq Artemis 移至 Apache
猜你喜欢
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2011-09-21
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多