2016-01-11 2 views
1

Недавно мы столкнулись с ситуацией, когда сообщения были доставлены из очереди потребителем, но не доходили до слушателя, связанного с этой очередью. Мы смогли сделать это утверждение, потому что у нас есть перехватчик для наших слушателей (который печатает сообщение журнала), который не был вызван для этих сообщений. Как только мы перезапустили сервер (tomcat), сообщения были израсходованы и удалены.AMQP потребитель (слушатель адаптера + SimpleMessageListenerContainer), содержащее сообщение

Мы хотели бы знать причину такого поведения. Мы проанализировали дампы потоков, но безуспешно.

+0

Было бы здорово увидеть конфигурацию и журналы DEBUG по этому вопросу. И в журналах укажите нас, пожалуйста, где вы уверены, что сообщения должны быть использованы. –

ответ

1

Такие вопросы всегда вызваны одной из двух задач:

  • контейнер нить (ы) «застрял» в пользовательском коде
  • некоторых сетевых компонентов (например, маршрутизатор) молча закрывающая соединение, которое он считает простаивает, так что клиент и/или сервер не знают, что соединение закрыто.

Вы, кажется, устранили первый (при условии, что ваш анализ правильный), поэтому он, скорее всего, второй.

Вы можете включить биение сердца при подключении, чтобы сеть не считала, что соединение простаивает. Обратитесь к документации RabbitMQ.

+0

Привет, Гэри, У нас есть сердцебиение, установленное на нашем соединении, и мы уверены, что это не так, поскольку другие слушатели в этом соединении работают отлично. Только в определенных очередях сообщения застревают, и, как сказано, эти сообщения достигли потребительской стороны, но не были получены слушателем. Мы еще раз посмотрим на дампы потоков, поскольку вы указываете, что существует только две причины такого поведения. – manu

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