我已经使用RabbitMQ服务器并在立即字段设置为true时发布消息,我尝试发送50,000条消息并使用rabbitmqctl list_queues,我看到队列中的消息数量为零.然后我将立即标志更改为false并再次尝试发送50,000条消息然后使用rabbitmqctl list_queues我看到总共100,000条消息在队列中.(直到现在还没有消费者存在)
之后我开始使用消费者并且它消耗了所有100,000条消息.任何人都可以帮助我理解立即位字段和这种行为.另外,我无法理解强制位字段的概念.
提前感谢.
Gurpreet Singh.
Bri*_*lly 117
这些immediate和mandatory字段是AMQP规范的一部分,RabbitMQ FAQ中也包含这些内容,以阐明其实现者如何解释其含义:
此标志告诉服务器如果无法将消息路由到队列,如何做出反应.具体来说,如果设置了必需,并且在运行绑定后,消息被放置在零队列上,则消息将返回给发送方(使用basic.return).如果在相同的情况下没有设置强制,服务器将默默地丢弃该消息.
或者用我的话说,"把这条消息放在至少一个队列上.如果你不能,请把它发回给我."
对于使用立即设置发布的消息,如果匹配的队列具有就绪消费者,则其中一个消息将路由到该消息.如果幸运消费者在收到消息之前崩溃,则该消息将被重新排队和/或传递给该队列上的其他消费者(如果没有崩溃,则消息被确认并且全部按照正常情况完成).但是,如果匹配的队列没有就绪消费者,则该消息将不会排队以便从该队列进行后续重新传递.仅当所有匹配队列都没有就绪消费者时才将消息返回给发件人(通过basic.return).
或者用我的话来说,"如果至少有一个消费者连接到我的队列,可以立即接收消息,立即将消息传递给他们.如果没有连接消费者,那么消费我的消息是没有意义的后来他们永远都看不到了.他们打盹,他们输了."
http://www.rabbitmq.com/blog/2012/11/19/breaking-things-with-rabbitmq-3-0/
删除“即时”国旗
发生了什么变化?我们删除了对AMQP的basic.publish上很少使用的“立即”标记的支持。
你到底为什么这样做?对“立即”的支持使代码库的许多部分变得更加复杂,尤其是在镜像队列周围。这也阻碍了我们能够在镜像队列中实现实质性的性能改进。
我需要做什么?如果只希望发布将被丢弃的消息(如果这些消息不会立即被消耗),则可以将其发布到TTL为0的队列中。
如果您还需要发布者能够确定发生了这种情况,则还可以使用DLX功能将此类消息路由到另一个队列,发布者可以从中使用它们。
只是在此处复制了公告以供快速参考。
| 归档时间: |
|
| 查看次数: |
15237 次 |
| 最近记录: |