我正在尝试使用spring集成并且对出站网关感到困惑。以下是我的问题。
这是我对出站网关的理解。
Spring集成amqp出站网关从requestChannel接收消息并将其写入rabbitmq队列(requestQueue)并等待rabbitmy replyQueue上的回复。一旦回复可用,它就会读取并将其添加到responseChannel。
问题是,如果多个作业实例同时发送多个请求,并且同一个rabbitmq replyQueue上有不同作业对不同请求的响应。
那么出站网关如何选择响应?它是否使用相关ID来仅获取对同一网关发送的请求的响应并忽略其他响应?
答案 0 :(得分:1)
这取决于网关的配置方式;默认情况下,会为每个请求创建一个单独的(自动删除)回复队列。
如果配置的RabbitTemplate
使用显式回复队列(和reply-listener
),则模板会在内部通过在消息上设置correlationId
来进行关联。这样,每个回复都会返回给正确的来电者。
您需要确保将出站网关上的reply-timeout
设置为足够大的值;它默认为5秒。
编辑:
请注意,为了同时运行作业(每your other question),您必须使用默认回复路由而不是专用回复队列。与JMS不同,AMQP没有消息选择器,因此您不能使用相同的回复队列来使用多个网关。