Ограничение целевых экземпляров JMS

Можно ли ограничить количество экземпляров приемника JMS одним экземпляром? т.е. обрабатывать только одно сообщение из очереди в любой момент времени?

Причина, по которой я спрашиваю, заключается в том, что у меня есть довольно интенсивный процесс рендеринга для каждого сообщения (потенциально много тысяч). Я хотел бы ограничить выполнение этого кода одним экземпляром за раз.

Мой сервер приложений - JBoss AS 6.0.


person jumponadoughnut    schedule 24.03.2010    source источник


Ответы (1)


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

Правильный ответ — настроить размер пула потоков, чтобы сбалансировать производительность с требованиями к памяти.

Много тысяч? В секунду, в минуту, в час? Скорость, с которой они прибывают, и время, необходимое для каждой задачи, имеют решающее значение. Сколько времени, памяти, процессора на запрос? Убедитесь, что вы настроили свою очередь для обработки того, что может быть довольно большим отставанием.

ОБНОВЛЕНИЕ. Если в секунду поступает десять сообщений, и одному слушателю требуется 10 секунд для обработки сообщения, то вам потребуется 101 поток слушателей, чтобы не отставать. (10 сообщений в секунду * 10 секунд означает, что 100 сообщений поступят к тому времени, когда первый прослушиватель завершит свою 10-секундную задачу. 101-й прослушиватель обработает 101-е сообщение, а последующие прослушиватели закончат вовремя, чтобы не отставать.) Если вам нужен 1 МБ ОЗУ на слушателя вам потребуется 101 МБ ОЗУ только для обработки всех сообщений на одном сервере. Вам понадобится аналогичная оценка для ЦП.

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

person duffymo    schedule 24.03.2010
comment
Спасибо. Чтобы дать общее представление, мы говорим о десятках запросов в секунду со временем обработки от 10 до 30 секунд на сообщение. Хотя я хотел бы максимально оптимизировать скорость обработки, меня больше всего беспокоит истощение ресурсов сервера, если для каждого запроса создается новый экземпляр, как это происходило с моей существующей реализацией, которая использует вызовы сеансовых компонентов без сохранения состояния. . - person jumponadoughnut; 24.03.2010