ActiveMQ с медленным потребителем пропускает 200 сообщений - PullRequest
1 голос
/ 21 февраля 2012

Я использую ActiveMQ вместе с Mule (своего рода ESB на основе Spring).У нас быстрый производитель и медленный потребитель.Это синхронная конфигурация только с одним потребителем.

Здесь конфигурация потребителя в весеннем стиле: http://pastebin.com/vweVd1pi

Самым большим требованием является поддержание порядка сообщений.Однако после нескольких часов выполнения этого кода ActiveMQ внезапно пропускает 200 сообщений и отправляет следующие. 200 сообщений все еще находятся в activeMQ, они не теряются.Но наш клиент (Mule) действительно имеет некоторый пользовательский код для проверки порядка сообщений, используя уникальный идентификатор.

У меня была эта проблема уже несколько месяцев назад.Мы меняем потребителя с помощью параметра "jms.prefetchPolicy.queuePrefetch = 1".Казалось, что это сработало хорошо, и это было исправление, в котором мы нуждались сейчас, когда проблема снова возникла у другого потребителя.

Это ошибка или проблема конфигурации?

1 Ответ

0 голосов
/ 21 февраля 2012

Я не могу говорить о требованиях с точки зрения Муле, но есть несколько брокерских функций, на которые стоит обратить внимание.Существует два способа гарантировать порядок сообщений в ActiveMQ:

Группы сообщений - это способ гарантировать, что набор связанных сообщений будет использоваться одним и тем же потребителем в том порядке, в котором они размещены.в очереди .Чтобы использовать его, вам нужно указать заголовок JMSXGroupID для связанных сообщений и назначить им инкрементный номер JMSXGroupSeq.Если потребитель умирает, оставшиеся сообщения из этой группы будут отправлены другому отдельному потребителю, сохраняя при этом порядок.

Общий порядок сообщений применяется ко всем сообщениям в тема .Он настроен на посреднике для каждого получателя и не требует особых изменений в клиентском коде.Он поставляется с дополнительными затратами на синхронизацию.

Обе функции позволяют масштабировать до нескольких потребителей.

...