Spring 集成 JMS 端点的事务管理器定义
Transaction manager definition for Spring Integration JMS endpoint
在 Spring 集成中 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 调用,因为我必须重新设计退出流程。
像这样:
Jms.messageDrivenChannelAdapter(
Jms.container(this.jmsConnectionFactory, ...)
.transactionManager(...)
.get())
有 Jms.messageDrivenChannelAdapter()
接受 AbstractMessageListenerContainer
实施,如您所见,来自 Jms.container()
工厂的顶级建造者。
更新
对于 SI Java DSL 1.1.x
解决方法如下:
- 使用
Jms.messageDrivenChannelAdapter(AbstractMessageListenerContainer)
- 为
DefaultMessageListenerContainer
配置顶级 @Bean
- 并使用其
setTransactionManager()
您可以使用以下代码段
@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();
}
在 Spring 集成中 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 调用,因为我必须重新设计退出流程。
像这样:
Jms.messageDrivenChannelAdapter(
Jms.container(this.jmsConnectionFactory, ...)
.transactionManager(...)
.get())
有 Jms.messageDrivenChannelAdapter()
接受 AbstractMessageListenerContainer
实施,如您所见,来自 Jms.container()
工厂的顶级建造者。
更新
对于 SI Java DSL 1.1.x
解决方法如下:
- 使用
Jms.messageDrivenChannelAdapter(AbstractMessageListenerContainer)
- 为
DefaultMessageListenerContainer
配置顶级 - 并使用其
setTransactionManager()
@Bean
您可以使用以下代码段
@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();
}