2013-11-06 2 views
2

Мы используем HornetQ 2.2.5, и наша проблема заключается в том, что на стороне клиента (которая отправляет сообщения в Q) все потоки производителей застревают в состоянии WAITING.Нити производителей HornetQ застряли в состоянии WAITING

Обратите внимание, что производитель находится на одной машине, а сервер HornetQ - на другом.

Это нить дамп на стороне клиента:

Тема: пул-10-жильный-9: приоритета: 5, демон: ложный, ThreadId: 521, ThreadState: ОЖИДАНИЕ, lockName: Java .util.concurrent.Semaphore $ NonfairSync @ 60568a13

sun.misc.Unsafe.park (Native Method)

java.util.concurrent.locks.LockSupport.park (LockSupport.java:156) Явы. util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt (AbstractQueuedSynchro nizer.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-отказ-проверить-нить] 19: 25: 30820 ПРЕДУПРЕЖДЕНИЕ [org.hornetq.core.protocol.core.impl.RemotingConnectionImpl]
Обнаружен отказ подключения: не получено данных от /10.2.6.11:50697. Вероятно, клиент вышел из строя или отключился , не закрыв его соединение, или сеть между сервером и сбой клиента. Возможно, вы также неправильно настроили connection-ttl и период проверки отказа клиента. Пожалуйста, ознакомьтесь с руководством пользователя для . Теперь соединение будет закрыто. [code = 3]

Есть ли причина, по которой все потоки производителей застревают?

ответ

2

Это FAQ на форуме пользователей 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

+0

в соответствии с вашим ответом, сообщения ждать потребляться. но мы проверили, что Q пуст (с QueueBrowser), и, кроме того, addfress-full-policy, если Q сконфигурирован как DROP. здесь Q Конфигурация XML: <адрес-настройки> 524288000 10485760 <адрес-полная политика> DROP

+0

Кроме того, мы проверили, что потребитель работает - мы просмотрели Q, пока потребитель работал, и браузер показал 0 msgs в Q., тогда мы отключили пользователя, а браузер показал, что Q содержит все больше и больше сообщений. во время этого процесса производитель блокируется. –

+1

Вы используете 2.2.5, старую версию. Вероятно, вы должны обновиться, и если вы все еще видите проблему, мне нужен репликатор для ошибки. –

Смежные вопросы