activemq.prefetchSize доступен только для сообщения SUBSCRIBE, но не CONNECT, в соответствии с документами ActiveMQ для их расширенных заголовков stomp (http://activemq.apache.org/stomp.html). Вот соответствующая информация:
глагол: ПОДПИСАТЬСЯ
header: activemq.prefetchSize
тип: int
описание: указывает максимальное
количество ожидающих сообщений, которые будут
быть отправленным клиенту. Однажды это
максимум достигнут не больше сообщений
отправляются до клиента
подтверждает сообщение. Установите 1 для
очень честное распространение сообщений
через потребителей, где обработка
сообщения могут быть медленными.
Мое чтение и опыт работы с этим состоят в том, что, поскольку M1 не был подтвержден (b / c, у вас включено подтверждение клиента), этот M1 должен быть сообщением 1, разрешенным prefetchSize = 1, установленным в подписке. Я удивлен, узнав, что это не сработало, но, возможно, мне нужно провести более подробный тест. Ваши настройки должны соответствовать желаемому поведению.
Я слышал от других о бреде о рассылке activemq, поэтому возможно, что это ошибка используемой версии.
Одно из предложений, которое я хотел бы сделать, это либо прослушать сетевой трафик, чтобы узнать, получает ли M1 по какой-то причине подтверждение, либо сгенерировать некоторые операторы put в гем ruby stomp, чтобы посмотреть сообщение (на этом я обычно заканчиваю делать при отладке проблем с топами).
Если у меня будет возможность попробовать это, я дополню свой комментарий своими собственными результатами.
Одно предложение: вполне возможно, что несколько длинных обрабатывающих сообщений могут быть отправлены, и если число длинных обрабатывающих сообщений превышает ваше количество процессов, вы будете в этом исправлении, где ожидают сообщения быстрой обработки.
У меня, как правило, есть хотя бы один выделенный процесс, который просто выполняет быструю работу, или, другими словами, выделяет набор # процессов, которые просто выполняют более длительные задания. Если все потребительские процессы опроса слушают как длинные, так и короткие, это может привести к неоптимальным результатам независимо от того, что делает диспетчеризация. Группы процессов - это способ настроить потребителя на прослушивание поднабора адресатов: http://code.google.com/p/activemessaging/wiki/Configuration
имя группы процессоров,
* List_of_processors
A processor group is a way to run the poller to only execute a subset of
процессоры, передавая имя
группа в командной строке poller
аргументы.
You specify the name of the processor as its underscored lowercase
версия. Так что если у вас есть
FooBarProcessor и BarFooProcessor в
группа процессоров, это будет выглядеть
это:
ActiveMessaging::Gateway.define do |s|
...
s.processor_group :my_group, :foo_bar_processor, :bar_foo_processor
end
The processor group is passed into the poller like the following:
./script/poller start -- process-group=my_group