JMS onMessage () и параллелизм - PullRequest
       20

JMS onMessage () и параллелизм

4 голосов
/ 24 октября 2010

У меня есть отдельное приложение JMS, которое подписывается на несколько разных тем JMS.У каждой темы есть свой сеанс и слушатель onMessage ().Каждый метод onMessage () обновляет общую таблицу текущих значений - все методы onMessage () обновляют одну и ту же таблицу текущих значений.

Я читал, что метод onMessage фактически вызывается в потоке провайдера JMS.Итак, мой вопрос: если все эти методы onMessage () вызываются в отдельном потоке, чем мое приложение, разве это не создает проблему параллелизма, поскольку все эти потоки обновляют общий CVT?Похоже, мне нужно как-то синхронизировать доступ к вариатору?

1 Ответ

4 голосов
/ 24 октября 2010

Краткий ответ на ваш вопрос : ДА, вам нужно позаботиться о проблемах параллелизма, когда ваш код JMS обновляет какой-то распространенный объект в памяти.

Тем не менее, я не уверен, что вы подразумеваете под "общей таблицей значений тока"? Если это какая-то таблица базы данных, то база данных должна позаботиться о проблемах параллелизма.

РЕДАКТИРОВАТЬ: оказалось, что "таблица общих текущих значений" является общим объектом в памяти. Как я упоминал ранее, в этом случае вам нужно самим решать проблемы параллелизма ( Учебник по параллелизму Java ).

Существует в основном два подхода к этой проблеме:

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

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

JMS onMessage() метод всегда вызывается потоком провайдера JMS (также известен как асинхронный вызов).

...