Spring Integration JMS端点的事务管理器定义

时间:2016-10-18 18:28:29

标签: java spring spring-integration dsl

在Spring Integration中,XML DSL能够为JMS消息驱动的通道适配器指定事务管理器:

<int-jms:message-driven-channel-adapter id="..."
        connection-factory="..." destination="..."
        channel="..." error-channel="errorChannel"
        transaction-manager="processTransactionManager" auto-startup="false"/>

如何将事务管理器添加到我现有的SI Java DSL

Jms.messageDrivenChannelAdapter(...)
                .destination(...)
                .outputChannel(...)
                .errorChannel(errorChannel)
                .autoStartup(false)
                .get();

我不会在这里使用Jms.channel(...) DSL电话,因为我必须重做退出流程。

2 个答案:

答案 0 :(得分:1)

像这样:

Jms.messageDrivenChannelAdapter(
        Jms.container(this.jmsConnectionFactory, ...)
            .transactionManager(...)
            .get())

Jms.messageDrivenChannelAdapter()接受AbstractMessageListenerContainer实施,您可以看到Jms.container()工厂的顶级构建器。

<强>更新

对于SI Java DSL 1.1.x,解决方法如下:

  1. 使用Jms.messageDrivenChannelAdapter(AbstractMessageListenerContainer)
  2. @Bean
  3. 配置顶级DefaultMessageListenerContainer
  4. 并使用其setTransactionManager()

答案 1 :(得分:0)

您可以使用以下代码段

@Bean
PlatformTransactionManager transactionManager(
    ConnectionFactory connectionFactory) {
    return new JmsTransactionManager(connectionFactory);
}

@Bean
JmsInboundGateway jmsInboundGateway(
    ConnectionFactory connectionFactory,
    MessageChannel errorChannel,
    PlatformTransactionManager transactionManager) {

    return Jms
        .inboundGateway(
            Jms.container(connectionFactory, "process-input")
                .transactionManager(transactionManager)
                .get()
            )
        .requestChannel(processingInputChannel())
        .defaultReplyQueueName("process-output")
        .replyChannel(processingOutputChannel())
        .errorChannel(errorChannel)
        .get();
}