没有回复侦听器的Spring集成JMS网关

时间:2015-11-03 16:00:21

标签: java multithreading spring jms spring-integration

我对Spring Integration遇到了以下案例的挑战。

相同的应用程序(Spring Integration)在多个服务器上运行, 对于JMS(出站)我使用的是jms:outbound-channel-adapter,但是检查出站网关我注意到有用于调整JMS队列的参数(显式启用qos,生存时间和所以,问题是"回复 - 监听器",因为应用程序在连接到其他服务器(其他网关)的多个服务器上运行,回复消息可以由其他服务器处理,而不是发送JMS消息的服务器。

我怀疑如何配置"出站网关"没有任何"回复 - 听众",这意味着没有"回复 - 听众"配置(既不会预先创建,因为将创建一个可能永远不会收到回复的线程,并将保持一个线程(监听器线程)没有任何理由)。

阅读文档我明白这是不可能的。 这是真的吗?比如没有"回复听众"没有办法使用出站网关?

1 个答案:

答案 0 :(得分:0)

让我稍微引用JmsOutboundGateway源代码:

if (logger.isWarnEnabled()) {
    logger.warn("The gateway cannot use a reply listener container with a specified destination(Name/Expression) " +
                "without a 'correlation-key'; " +
                "a container will NOT be used; " +
                "to avoid this problem, set the 'correlation-key' attribute; " +
                "some consumers, including the Spring Integration <jms:inbound-gateway/>, " +
                "support the use of the value 'JMSCorrelationID' " +
                "for this purpose. Alternatively, do not specify a reply destination " +
                "and a temporary queue will be used for replies.");
    }

稍后在handleRequestMessage

if (this.replyContainer == null) {
    jmsReply = this.sendAndReceiveWithoutContainer(requestMessage);
}

因此,您可以在没有<int-jms:outbound-gateway>的情况下使用reply-listener。 像这样:

<int-jms:outbound-gateway request-destination="requestQueueA" 
                              reply-destination="replyQueueB" 
                              connection-factory="connectionFactory"/>