我对Spring Integration遇到了以下案例的挑战。
相同的应用程序(Spring Integration)在多个服务器上运行, 对于JMS(出站)我使用的是jms:outbound-channel-adapter,但是检查出站网关我注意到有用于调整JMS队列的参数(显式启用qos,生存时间和所以,问题是"回复 - 监听器",因为应用程序在连接到其他服务器(其他网关)的多个服务器上运行,回复消息可以由其他服务器处理,而不是发送JMS消息的服务器。
我怀疑如何配置"出站网关"没有任何"回复 - 听众",这意味着没有"回复 - 听众"配置(既不会预先创建,因为将创建一个可能永远不会收到回复的线程,并将保持一个线程(监听器线程)没有任何理由)。
阅读文档我明白这是不可能的。 这是真的吗?比如没有"回复听众"没有办法使用出站网关?
答案 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"/>