在1个长度的队列中的消息会发生什么变化而不是在rabbitmq中被激活?

时间:2015-06-22 13:13:32

标签: java rabbitmq message-queue

所以我已经声明了一个长度为1的队列,并且发布者不会自动发送消息,这意味着我收到了每条消息都收到了消息。那么这里发生的消息是什么?

当新邮件到达队列时,旧的未经处理的邮件会发生什么?

Map < String, Object > args = new HashMap < String, Object > ();
args.put("x-max-length", 1);
channel.queueDeclare("myqueue", false, false, false, args);
channel.basicConsume("myqueue", false, consumer);

我想要实现的是myqueue应该只保留一条消息,任何发布者都可以阅读该消息,但不应该删除该消息。当新消息到达队列时,它应该删除该消息并放入新消息。

1 个答案:

答案 0 :(得分:2)

RabbitMQ无法删除已传递给消费者的消息。如果消费者决定回复消息,那么RabbitMQ将等待消费者的ack / nack或拒绝,以决定如何处理所述消息。

传递给消费者的邮件不计入队列长度。

来自文档:

  

在所有情况下都使用就绪消息的数量;未确认的消息不计入限制。

https://www.rabbitmq.com/maxlength.html

想象一下,你在机场的队列中,然后轮到你办理登机手续,你不再在队列中,如果有人被要求计算队列长度,那个人不会带你去考虑到了。 RabbitMQ与队列长度类似。