Spring integration 当从一个JMS队列持久化到另一个JMS队列时,是否应使用JMSTRANASCTIONManager

Spring integration 当从一个JMS队列持久化到另一个JMS队列时,是否应使用JMSTRANASCTIONManager,spring-integration,spring-jms,Spring Integration,Spring Jms,要求: 我们需要从JMS队列(由不同的应用程序发布)中检索消息,并将该消息持久保存在JMS队列中。需要整个流是事务性的,所以如果消息不能持久保存在下游JMS队列中,则不应确认从上游JMS队列接收到的消息。 我的配置如下 <int-jms:message-driven-channel-adapter id="MessageDrivenAdapter" channel=" jmsMessageChannel " destination="sourceDestination"

要求: 我们需要从JMS队列(由不同的应用程序发布)中检索消息,并将该消息持久保存在JMS队列中。需要整个流是事务性的,所以如果消息不能持久保存在下游JMS队列中,则不应确认从上游JMS队列接收到的消息。 我的配置如下

<int-jms:message-driven-channel-adapter
   id="MessageDrivenAdapter" channel=" jmsMessageChannel " destination="sourceDestination" 
     connectionFactory="CF1"
acknowledge="transacted"
    />

<int:channel id=" jmsMessageChannel " />
<int-jms:outbound-channel-adapter id="sendsomemsg"
    channel=" jmsMessageChannel "  destination=”finalDestination”
    connectionFactory="CF2"
    session-transacted="true" />


我是否需要在此场景中使用JmsTransactionManager,或者应该高于配置就足够了。我们可以处理重复的消息,因此我相信我们不需要XA事务。

这里您肯定需要XA事务,因为您使用的是多个独立的事务资源。即使它们都是JMS,也不意味着它们可以共享事务

o您可以尝试一种解决方案,如
ChainedTransactionManager
和chain two
JmsTransactionManager
s-每个JMS资源一个


Dave Syer提供了更多信息。

这里肯定需要XA事务,因为您使用的是多个独立的事务资源。即使它们都是JMS,也不意味着它们可以共享事务

o您可以尝试一种解决方案,如
ChainedTransactionManager
和chain two
JmsTransactionManager
s-每个JMS资源一个


Dave Syer提供了更多信息。

只要您不切换到另一个线程(队列通道、任务执行器),并且两个组件使用相同的连接工厂,出站操作将在与入站相同的事务中运行-出站适配器中的底层
JmsTemplate
将使用侦听器容器传递消息的相同会话。

只要您不切换到另一个线程(队列通道、任务执行者),两个部件使用相同的连接工厂,出站操作将在与入站相同的事务中运行-出站适配器中的底层
JmsTemplate
将使用侦听器容器在其上传递消息的相同会话。

这些组件使用相同的连接工厂。连接工厂不同。我已经编辑了代码。因此,如果您发现
ChainedTransactionManager
复杂,您需要使用jmtransactionmanager或任何其他XA实现。共享的单个
jmstrasactionmanager
不适用于您的案例。在这种情况下(现在您在问题中说明),@Artem是完全正确的,您需要XA,除非您使用Dave Syer文章中的一种同步技术。这些组件使用相同的连接工厂。连接工厂不同。我已经编辑了代码。因此,如果您发现
ChainedTransactionManager
复杂,您需要使用jmtransactionmanager或任何其他XA实现。共享的单个
jmstrasactionmanager
不适用于您的案例。在这种情况下(现在您在问题中说明),@Artem是完全正确的,您需要XA,除非您使用Dave Syer文章中的一种同步技术。连接工厂是不同的。我已经编辑了代码。因此,我们认为需要使用JMSTRANSACTIONMANAGER。连接工厂是不同的。我已经编辑了代码。因此,相信您需要使用JmsTransactionManager