RabbitMQ使用立即和强制位

我已经使用RabbitMQ服务器和立即字段设置为发布消息时,我试着发送50,000条消息,并使用rabbitmqctl list_queues ,我看到队列中的消息数为零 。 然后我改变了立即标志为 ,再次尝试发送50,000条消息,然后使用rabbitmqctl list_queues,我看到总共有100,000条消息在队列中(到目前为止还没有消费者在场)

之后,我开始消费,它消耗了所有的10万条消息。有人可以帮助我了解即时位域和这种行为。 另外,我无法理解强制位域的概念。

提前感谢。

Gurpreet辛格。

immediatemandatory字段是AMQP规范的一部分,在RabbitMQ常见问题解答中也包含了这些字段,以阐明其实现者如何解释其含义:

强制性

如果消息不能被路由到队列,该标志告诉服务器如何反应。 具体来说,如果强制设置,并且在运行绑定之后,消息被放置在零队列上,则消息被返回给发送者(具有basic.return)。 如果在相同的情况下没有设置强制,服务器会默默地删除消息。

或者用我的话来说, “把这个信息放在至less一个队列中,如果不行,就把它发回给我。”

即时

对于使用立即集发布的消息,如果匹配的队列已经准备好消费者,则其中一个将消息路由到它。 如果幸运消费者在收货之前崩溃,则消息将被重新发送和/或递送给该队列中的其他消费者(如果没有发生崩溃,则消息被拒绝并且按照正常完成)。 但是,如果一个匹配的队列拥有零个准备好的消费者,那么这个消息将不会被排队,以便随后从该队列中重新投递。 只有当所有的匹配队列没有准备好的消费者的消息返回给发件人(通过basic.return)。

或者用我的话来说, “如果至less有一个消费者连接到我的队列,可以立即收到消息,那么就立即向他们发送消息。如果没有消费者连接,那么消费我的消息是没有意义的后来他们再也看不到了,他们打瞌睡,他们输了。“