Ограничение экземпляров назначения JMS - PullRequest
2 голосов
/ 24 марта 2010

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

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

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

1 Ответ

2 голосов
/ 24 марта 2010

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

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

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

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

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

...