Java Spring集成JMS端点的事务管理器定义
在Spring Integration中,XML DSL能够为JMS消息驱动通道适配器指定事务管理器:Java Spring集成JMS端点的事务管理器定义,java,spring,spring-integration,dsl,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="processTransact
<int-jms:message-driven-channel-adapter id="..."
connection-factory="..." destination="..."
channel="..." error-channel="errorChannel"
transaction-manager="processTransactionManager" auto-startup="false"/>
我不会在这里使用Jms.channel(…)
DSL调用,因为我必须修改退出流程。如下:
Jms.messageDrivenChannelAdapter(
Jms.container(this.jmsConnectionFactory, ...)
.transactionManager(...)
.get())
有Jms.messageDrivenChannelAdapter()
来接受AbstractMessageListenerContainer
实现,正如您从Jms.container()工厂看到的顶级生成器一样
更新
对于SI Java DSL1.1.x
,解决方法如下:
使用Jms.messageDrivenChannelAdapter(AbstractMessageListenerContainer)
DefaultMessageListenerContainer
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();
}
谢谢,但是在我的SI
1.1.2.RELEASE
版本中没有transactionManager
方法。我应该使用什么版本?好的,谢谢你可以JmsListenerContainerSpec.get()
并调用setTransactionManager()
。考虑升级到<代码> 1.2 <代码>:。(您在问题中没有提到版本…)我无法使用简单升级到1.2.0
版本的解决方案,因为它需要将其他Spring的LIB升级到4.3.4
,这样的升级会给我们的代码带来其他问题。那么,是否可以在1.1.2.RELEASE
中指定transactionManager
?我说的是:JmsListenerContainerSpec.get()
并直接调用AbstractPollingMessageListenerContainer.setTransactionManager()。您仍然可以为规范
指定任何其他选项。您对SI-4.3.4有哪些其他问题?请参阅我答案中的更新。
@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();
}