我们有一个应用,可以对hornetq
消息执行一些非常动态的路由,以便从一个队列中读取并写入另一个队列 - 在一个事务处理会话中。我们的想法是,如果我们无法移动到目标队列,我们就不会将其从原始队列中删除。它工作正常,直到我们对网络延迟进行一些测试 - 事情开始分崩离析。
由于延迟,交易无法提交且无法回滚。我们看到deliverycount
中有数千封邮件被拦截,即使在20分钟后也从未清除过。默认情况下,我们有连接工厂的调用超时 - 这是30秒。该应用程序有大约10个实例,为8个不同的目标队列提供服务,因此您可能会认为如果按顺序完成交付,我们不会在deliveringcount
中看到超过80个文件,但我们确实看到的不止这些。
这些文件仅在应用程序关闭或者我们终止并重新启动会话时才会离开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
答案 0 :(得分:0)
HornetQ在2.3.0之后修复了一些错误。你应该试试它的最新版本。
我相信这个问题会在以后的版本中修复,但如果不是这样的话,你应该提供一个测试来复制这个问题,并提出论坛帖子,或者如果你绝对确定你已经在最新版本的测试中复制了这个问题你应该在JBoss JIRA的项目HornetQ上打开bug修复请求。