Группа сообщений ActiveMQ для виртуальной темы - PullRequest
2 голосов
/ 22 ноября 2011

Я так понимаю, что тема для рассылки сообщений клиентам. Но в документе ActiveMQ говорится о балансировке нагрузки:

Еще один способ объяснения групп сообщений заключается в том, что он обеспечивает балансировку загрузки сообщений между потребителями; где JMSXGroupID похож на идентификатор сеанса HTTP или значение cookie, а посредник сообщений действует как балансировщик нагрузки HTTP.

Вот что я не понимаю.

Разве это не вещание?

Что я хочу сделать ниже: Если производитель отправляет сообщения группе А, каким-то образом брокер контролирует трафик, и сообщения «физически» не должны переходить в группу В.

Возможно ли это даже с виртуальной темой?

1 Ответ

3 голосов
/ 22 ноября 2011

VirtualTopics создает очереди для каждого подписчика темы и реплицирует сообщения каждому из них, поэтому он «передает» все сообщения всем подписчикам.

Группы сообщений ActiveMQ предоставляют вам эксклюзивный потребительский поток для данной группы сообщений (отдельный JMSXGroupID). Вы не можете контролировать, какой потребитель выбирает каждую группу, и один и тот же потребительский поток может обрабатывать несколько групп.

Насколько я знаю, если вы установите JMSXGroupID для сообщения, отправленного в VirtualTopic, оно будет поступать в виртуальную очередь каждого подписчика. Однако если из этих очередей обрабатывается несколько потоков (maxConcurrentConsumers> 1), они будут однопоточными для каждой группы сообщений и т. Д.

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

...