Как улучшить обработку сообщений с большими очередями? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь использовать Spring JMS и ActiveMQ для обработки большого количества сообщений.Контекст проблемы следующий: каждый клиент создает набор сообщений, которые добавляются в очередь.Сообщения добавляются в очередь с идентификатором клиента в качестве параметра.

В одном случае клиент A может добавить в очередь 10 тыс. Сообщений, а клиент B добавляет только 100 сообщений в эту же очередь.Моя проблема в том, что клиент B должен подождать, пока все 10k сообщений не завершат обработку, прежде чем его 100 сообщений будут обработаны.

Есть ли способ одновременно обрабатывать некоторые сообщения клиента А и некоторые сообщения клиента Б?Я знаю, что есть возможность установить более высокий приоритет для сообщений от клиента B, но это не решает проблему, когда есть больше клиентов.Клиент с большим количеством сообщений будет заполнять очередь, в то время как другим придется ждать.

Буду признателен, если бы вы могли предоставить некоторую помощь или совет.

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Основная семантика очереди - «первым пришел - первым обслужен» (т. Е. FIFO). Нет реального способа избежать этого. Я рекомендую вам перепроектировать ваше приложение, чтобы использовать несколько очередей - по одной для каждого «типа» сообщений или независимых приложений, которые у вас есть.

0 голосов
/ 16 апреля 2019

Я думаю, что нашел решение проблемы. Это предполагает использование групп сообщений. Для каждого сообщения я устанавливаю свойство JMSXGroupID с идентификатором для клиента.

Поскольку они представляют собой несколько групп сообщений, очередь заботится о назначении сообщений из разных групп различным потребителям. Таким образом, документы от клиента B могут обрабатываться, пока документы от клиента A еще обрабатываются.

0 голосов
/ 11 апреля 2019

Я бы сказал, что вы можете точно настроить ваш activemq на количество сообщений, которые он обрабатывает в пакетном режиме. Кроме того, есть способ, которым вы можете точно настроить конкретного брокера и очередь. Для более подробной информации обратитесь по этой ссылке:

http://activemq.apache.org/performance-tuning

https://access.redhat.com/documentation/en-US/Fuse_ESB/4.4.1/html-single/ActiveMQ_Tuning_Guide/index.html

...