【问题标题】:Does Spring integration amqp outbound gateway choose response selectively?Spring集成amqp出站网关是否选择性地选择响应?
【发布时间】:2014-07-29 00:54:32
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

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

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

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

    编辑:

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

    【讨论】:

    • 非常感谢@Gary,您的帮助很大。衷心感谢!
    • 添加了与您的其他问题相关的评论。
    猜你喜欢
    • 2012-03-07
    • 2014-05-28
    • 2021-07-08
    • 1970-01-01
    • 2014-06-08
    • 2021-02-14
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多