Spring集成amqp出站网关是否有选择地选择响应?

时间:2014-06-08 07:52:58

标签: spring spring-integration

我正在尝试使用spring集成并且对出站网关感到困惑。以下是我的问题。

这是我对出站网关的理解。

Spring集成amqp出站网关从requestChannel接收消息并将其写入rabbitmq队列(requestQueue)并等待rabbitmy replyQueue上的回复。一旦回复可用,它就会读取并将其添加到responseChannel。

问题是,如果多个作业实例同时发送多个请求,并且同一个rabbitmq replyQueue上有不同作业对不同请求的响应。

那么出站网关如何选择响应?它是否使用相关ID来仅获取对同一网关发送的请求的响应并忽略其他响应?

1 个答案:

答案 0 :(得分:1)

这取决于网关的配置方式;默认情况下,会为每个请求创建一个单独的(自动删除)回复队列。

如果配置的RabbitTemplate使用显式回复队列(和reply-listener),则模板会在内部通过在消息上设置correlationId来进行关联。这样,每个回复都会返回给正确的来电者。

您需要确保将出站网关上的reply-timeout设置为足够大的值;它默认为5秒。

编辑:

请注意,为了同时运行作业(每your other question),您必须使用默认回复路由而不是专用回复队列。与JMS不同,AMQP没有消息选择器,因此您不能使用相同的回复队列来使用多个网关。