Spring集成是否允许出站网关选择性地选择响应?



我正在尝试使用spring集成,对出站网关有点困惑。以下是我的问题。

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

Spring integration amqp outbound gateway从requestChannel获取消息并将其写入rabbitmq queue (requestQueue),然后等待rabbitmy replyQueue上的回复。一旦应答可用,它就读取并将其添加到responchannel中。

问题是,如果多个任务实例并发发送多个请求,并且不同任务对不同请求的响应在同一个rabbitmq replyQueue上可用。

那么出站网关如何选择响应?它是否使用关联id仅获取由同一网关发送的请求的响应,而忽略其他响应?

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

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

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

编辑:

请注意,为了并发运行作业(根据您的其他问题),您必须使用默认的应答路由,而不是专用的应答队列。与JMS不同,AMQP没有消息选择器,因此您不能让多个网关使用相同的应答队列。

最新更新