Я работаю над задачей, которая требует:
- использования данных из JMS;
- их обработки;
- загрузки их в базу данных.
Поскольку документация предлагает :
- Я начинаю с
<int-jms:message-driven-channel-adapter channel="CHANNEL1" ... />
для отправки новых JMS
сообщений на канал CHANNEL1
; - Я применяю преобразователь , который преобразует сообщения из канала
CHANNEL1
в JobLaunchRequest
с заданием, которое вставляет данные в базу данных, и полезной нагрузкой, которая содержит исходную нагрузку JMS
сообщения; - Преобразованные сообщения отправляются на канал
CHANNEL2
; <batch-int:job-launching-gateway request-channel="CHANNEL2"/>
запускает выполнение нового задания, когда в канале появляется новое сообщение;
Проблема заключается в том, что я запускаю новую транзакцию базы данных каждый раз, когда поступают новые сообщения jms.
Вопрос : как мне обрабатывать такой поток?Каков общий шаблон для этого?
ОБНОВЛЕНИЕ
Я запускаю задание для каждого сообщения.Одно сообщение содержит один фрагмент данных.Если я прибегну к использованию spring-batch
, то мне придется управлять каким-то средством опроса (поправьте меня, если я ошибаюсь), но я бы хотел применить подход, основанный на сообщениях, например (любой):
- Льготный период: когда появляется новое сообщение, я жду
10
больше сообщений или начинаю обрабатывать все, что я получил * через 1052 * секунды после получения первого сообщения. - Я просто читаю все
JMS
очередь содержит после того, как я получил уведомление, что очередь содержит новое сообщение.
Конечно, я хотел бы, чтобы решение было транснациональным: порядок обработки сообщений не имеет значения.