Spring Integration DSL JMS请求/回复流程

时间:2014-12-11 22:28:58

标签: spring-integration spring-jms

我正在尝试使用Spring Integration Java DSL创建一个请求/回复流程,如下所述:

IntegrationFlows.from(directChannel)
                .handle(Jms.outboundGateway(connectionFactory)
                        .requestDestination(requestDestination)
                        .replyDestination(replyDestination))
                .handle(replyHandler)
                .get();

如果我杀死了应该处理回复的应用程序,那么回复将留在队列中,并且在下次应用程序启动时不会被使用。当我使用此流程发送跟进请求时,会收到上一条消息,而不是最新的回复。

我正在测试的消息流看起来像

  

App A发送消息 - >停止A - >应用B接收消息并发送回复R1

     

A启动 - > A发送另一条消息 - > B接收消息并发送   回复R2 - > A收到R1

     

R2留在队列中

我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

根本不应该以这种方式发生,我希望R1永远保留在队列中,因为网关使用消息选择器根据出站消息ID接收回复。所以新实例永远不应该选择旧消息。

在此模式下,它希望接收应用程序将入站消息ID复制到JMSCorrelationID标头。当入站消息没有JMSCorrelationID时,这是一种常见的JMS模式。

尝试将correlationKey设置为JMSCorrelationID。在该模式下,请求网关每个实例使用一个唯一的id,并且它希望接收方只是回显入站JMSCorrelationID标头。

如果您可以双方都获得调试日志,则可能有助于跟踪它。