gpt4 book ai didi

java - 长度为 1 的队列中未在rabbitmq 中确认的消息会发生什么情况?

转载 作者:行者123 更新时间:2023-11-30 03:22:38 25 4
gpt4 key购买 nike

因此,我声明了一个长度为 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 应该只保存一条消息,并且任何发布者都可以读取该消息,但不应该删除该消息。当新消息到达队列时,它应该删除该消息并放入新消息。

最佳答案

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

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

来自文档:

In all cases the number of ready messages is used; unacknowledged messages do not count towards the limit.

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

想象一下,你在机场排队,然后轮到你办理登机手续,你已经不在队列中了,如果有人要求计算队列长度,那个人不会考虑你。 RabbitMQ 对队列长度做了类似的事情。

关于java - 长度为 1 的队列中未在rabbitmq 中确认的消息会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30980910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com