【发布时间】:2019-07-05 19:03:18
【问题描述】:
基本问题其实很简单,让我们考虑以下链:
<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 的每次调用(对于每个拆分的消息)是在与原始消息相同的事务/线程中还是在各自的事务中处理?
【问题讨论】:
-
你已经问过这样的问题,我已经给你一些答案了。
-
不,这是一个不同的问题。上下文相同,但问题不同。我很乐意删除上下文,使其不再看起来像重复。我认为更多信息只会有帮助:)
-
@ArtemBilan 好了,删除了上下文,现在它是关于拆分器的事务边界的,而无需详细说明为什么我有兴趣知道这一点。
标签: java spring transactions spring-integration