Spring 集成 2 阶段提交

问题描述 投票:0回答:1

下面是我们的

IntegrationFlow
,请建议如何为涉及的2个数据库实现两阶段提交或尽力一阶段提交。谢谢

MQ
适配器 -->
Jpa.updatingGateway
(db1) &
Jpa.updatingGateway
(db2)

db1 和 db2 操作应该一起提交或回滚

spring-integration
1个回答
0
投票

对于两个不同的数据库(我假设也适用于 MQ),您需要使用

org.springframework.transaction.jta.JtaTransactionManager
。由您和您的环境决定如何获取 XA 事务:从 IBM WebSphere 等应用程序服务器获取 JNDI 或使用 Atomikos

然后,您将 JMS 入站端点配置为使用该事务管理器,并且所有下游流都将参与其中(如果它与直接通道连接)。

您的两个

Jpa.updatingGateway()
可以订阅同一个
PublishSubscribeChannel
,或者您可以使用一个
routeToRecipients()

例如:

    @Bean
    public IntegrationFlow jmsMessageDrivenRedeliveryFlow() {
        return IntegrationFlow
                .from(Jms.messageDrivenChannelAdapter(mqFactory)
                        .destination("myQueue")
                        .configureListenerContainer(c -> c.transactionManager(jtaTransactionManager)))
                .publishSubscribeChannel(publishSubscribeSpec -> publishSubscribeSpec
                        .subscribe(subFlow1 -> subFlow1.handle(Jpa.updatingGateway(db1)))
                        .subscribe(subFlow2 -> subFlow2.handle(Jpa.updatingGateway(db2))))
                .get();
    }
© www.soinside.com 2019 - 2024. All rights reserved.