Spring Batch Integration: увеличение пропускной способности при использовании данных из jms - PullRequest
0 голосов
/ 07 декабря 2018

Я работаю над задачей, которая требует:

  1. использования данных из JMS;
  2. их обработки;
  3. загрузки их в базу данных.

Поскольку документация предлагает :

  1. Я начинаю с <int-jms:message-driven-channel-adapter channel="CHANNEL1" ... /> для отправки новых JMS сообщений на канал CHANNEL1;
  2. Я применяю преобразователь , который преобразует сообщения из канала CHANNEL1 в JobLaunchRequest с заданием, которое вставляет данные в базу данных, и полезной нагрузкой, которая содержит исходную нагрузку JMS сообщения;
  3. Преобразованные сообщения отправляются на канал CHANNEL2;
  4. <batch-int:job-launching-gateway request-channel="CHANNEL2"/> запускает выполнение нового задания, когда в канале появляется новое сообщение;

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

Вопрос : как мне обрабатывать такой поток?Каков общий шаблон для этого?

ОБНОВЛЕНИЕ

Я запускаю задание для каждого сообщения.Одно сообщение содержит один фрагмент данных.Если я прибегну к использованию spring-batch, то мне придется управлять каким-то средством опроса (поправьте меня, если я ошибаюсь), но я бы хотел применить подход, основанный на сообщениях, например (любой):

  1. Льготный период: когда появляется новое сообщение, я жду 10 больше сообщений или начинаю обрабатывать все, что я получил * через 1052 * секунды после получения первого сообщения.
  2. Я просто читаю все JMS очередь содержит после того, как я получил уведомление, что очередь содержит новое сообщение.

Конечно, я хотел бы, чтобы решение было транснациональным: порядок обработки сообщений не имеет значения.

1 Ответ

0 голосов
/ 07 декабря 2018

BatchMessageListenerContainer может использоваться в вашем случае использования.Он позволяет пакетировать сообщения в пределах одной транзакции.

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

Надеюсь, это поможет.

...