猿问

spring集成分离器的事务边界

基本问题实际上非常简单,让我们考虑以下链:


<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(对于每个拆分的消息)是在与原始消息相同的事务/线程中还是会在各自的事务中处理?


繁华开满天机
浏览 92回答 1
1回答

千巷猫影

在 Spring Integration 中,除非您明确说明,否则不会进入新线程。既然你有<int:splitter>withing&nbsp;<chain>,它真的会为链中的下一个处理程序一个接一个地生成拆分的项目。一切都发生在由<poller>TX.
随时随地看视频慕课网APP

相关分类

Java
我要回答