基本问题实际上非常简单,让我们考虑以下链:
<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" />
<int:splitter id="messageSplitter" ref="messageSplitterService" apply-sequence="false" />
<int:transformer id="messagePersister" ref="messagePersisterService" method="persistMessageMetadata" />
</int:chain>
所有消息是否由
messageSplitter
在同一个事务和同一个线程中,或者它们随后会在不同的事务/不同的线程中被处理?
splitter(同步地)调用一个REST服务,该服务将为其提供消息必须到达的目标通道列表。然后它将创建如此多的副本,并将一个头文件设置为输出通道。该列表从拆分器返回。这个
messagePersister
将新消息的键与一些元数据一起存储在数据库表中。
是每一个呼叫
messagePersisterService.persistMessageMetadata
(对于每个拆分的消息)在与原始消息相同的事务/线程中,还是将在各自的事务中分别处理它们?