HornetQ生产者线程陷入WAITING状态

时间:2013-11-06 15:53:16

标签: hornetq producer

我们使用HornetQ 2.2.5,我们的问题是在客户端(向Q发送消息),所有生产者线程都处于WAITING状态。

请注意,制作人在一台机器上,而HornetQ服务器在另一台机器上。

这是客户端的线程转储:

  

线程:pool-10-thread-9:priority:5,demon:false,threadId:521,threadState:WAITING,   锁名称:java.util.concurrent.Semaphore$NonfairSync@60568a13

     

sun.misc.Unsafe.park(原生方法)

     

java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)   java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)   java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)   java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)

     

java.util.concurrent.Semaphore.acquire(Semaphore.java:441)   org.hornetq.core.client.impl.ClientProducerCreditsImpl.acquireCredits(ClientProducerCreditsImpl.java:74)   org.hornetq.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:305)   org.hornetq.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:142)   org.hornetq.jms.client.HornetQMessageProducer.doSend(HornetQMessageProducer.java:451)   org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:199)

在客户端缓存并重用与Q的连接和会话。

在服务器端,有以下日志:

  

[hornetq-failure-check-thread] 19:25:30,820警告   [org.hornetq.core.protocol.core.impl.RemotingConnectionImpl]
  检测到连接失败:未收到数据   /10.2.6.11:50697。客户可能已退出或崩溃   没有关闭它的连接,或服务器和之间的网络   客户失败了。您也可能已配置connection-ttl和   客户端故障检查周期不正确。请查看用户手册   更多信息。现在将关闭连接。 [code = 3]

为什么所有生产者线程都被卡住了?

1 个答案:

答案 0 :(得分:2)

这是关于hornetq用户论坛的常见问题...

HornetQ有不同的方法来处理消息溢出,保护它免受内存不足的影响。

  • 溢出时阻止
  • 流向磁盘(我们称之为..分页)
  • 删除(消息将消失。仅在您可以负担丢失消息的情况下才有效)
  • 错误(最近在2.4上引入,2.2没有此功能)

当您将系统设置为阻止时,客户端将等待仅在您使用消息后到达的信用。

因此,要么使用消息,要么将地址设置设置为分页。

有关设置分页的文档:

http://docs.jboss.org/hornetq/2.4.0.beta1/docs/user-manual/html/paging.html#paging.main.config

有关阻止模式的文档:

http://docs.jboss.org/hornetq/2.4.0.beta1/docs/user-manual/html/paging.html#d0e5213