Spring AMQP 使用 noLocal 消费者使用临时队列发送和接收
Posted
技术标签:
【中文标题】Spring AMQP 使用 noLocal 消费者使用临时队列发送和接收【英文标题】:Spring AMQP send & receive with temporary queues using a noLocal consumer 【发布时间】:2018-08-08 06:11:37 【问题描述】:当使用临时队列发送和接收时,会创建一个消费者,并将noLocal
属性设置为true
(请参阅RabbitTemplate#doSendAndReceiveWithTemporary
method line 1297 of version 1.7.4.RELEASE)。
根据javadocs for the basicConsume
method,当这个属性设置为true
,那么“服务器不应该把发布在这个频道的连接上的消息传递给这个消费者”。
现在,据我所知,这个消费者正在设置为实际接收回复消息。如果我是正确的,那么由于noLocal
属性设置为true
,难道不应该收到回复not吗?
当使用 RabbitMQ 作为 AMQP 代理时,可以正常接收回复消息。但是,当使用 Apache Qpid 时,没有收到回复。实际上,只有当noLocal
属性设置为false
时才会收到。
【问题讨论】:
经过更多研究后,我发现这篇文章 (rabbitmq.com/interoperability.html#qpid-python-tests) 指出 RabbitMQ 不支持非本地消费者。尽管如此,问题仍然存在,如果 RabbitMQ 支持,那么是否应该收到回复? 【参考方案1】:让服务器端与客户端在同一个应用程序中运行有点不寻常。这是 no-local 影响这种情况的唯一方式,因为通常客户端不会发布回复。
我们不声称与 QPID(当然不是 AMQP 1.0)兼容,但我看到 QPID 声称支持 AMQP 0.9.x,因此请随时打开JIRA Issue,我们会在时间允许的情况下进行查看。
【讨论】:
感谢您的回复。这实际上发生在使用 qpid 作为嵌入式 amqp 代理的 Spring Boot 测试期间。因此,就我而言,我的服务器和客户端都在同一个应用程序中运行。我已经打开了一个 github 问题 (github.com/spring-projects/spring-amqp/issues/712)。这样就够了吗?以上是关于Spring AMQP 使用 noLocal 消费者使用临时队列发送和接收的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Integration 和 AMQP,我可以创建竞争消费者的 Pub-Sub 组吗?