Граница транзакции пружинного интегрирующего сплиттера - PullRequest
0 голосов
/ 12 февраля 2019

Базовый вопрос на самом деле очень прост, давайте рассмотрим следующую цепочку:

<int:poller id="inputPoller" task-executor="inputTaskPool" fixed-delay="${input.poller.interval}"
            receive-timeout="${input.poller.timeout}" max-messages-per-poll="${poller.messages}">
    <int:transactional transaction-manager="chainedTransactionManager"/>
</int:poller>

<int:chain id="someInputChain" input-channel="theInputChannel">
    <int:poller ref="inputPoller" />
    <!-- various transfomers, nothing asynchronous -->
    <int:splitter id="messageSplitter" ref="messageSplitterService" apply-sequence="false" />
    <int:transformer id="messagePersister" ref="messagePersisterService" method="persistMessageMetadata" />
</int:chain>

Будут ли все сообщения, сгенерированные messageSplitter, находиться в одной транзакции и в одной и той же цепочке или это может бытьвпоследствии они обрабатываются в разных транзакциях / из разных потоков?

Сплиттер вызывает (синхронно) службу REST, которая выдаст ему список каналов назначения, которым должно быть отправлено сообщение.Затем он создаст столько копий и установит заголовок для выходного канала.Этот список возвращается из сплиттера.messagePersister будет хранить ключ новых сообщений в таблице базы данных вместе с некоторыми метаданными.

Каждый вызов messagePersisterService.persistMessageMetadata (для каждого разделенного сообщения) в той же транзакции / потоке, что и исходное сообщениеили они будут обрабатываться каждый в своей собственной транзакции?

1 Ответ

0 голосов
/ 12 февраля 2019

В Spring Integration ничего не переходит в новый поток, если вы не скажете это явно.Поскольку у вас есть <int:splitter> внутри <chain>, он действительно будет производить разделенные элементы один за другим для следующего обработчика в цепочке.Все происходит в том же потоке в задаче, инициированной <poller>, и, в вашем случае, в TX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...