Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在rabbitmq中未确认的1长度队列中的消息会发生什么情况?_Java_Rabbitmq_Message Queue - Fatal编程技术网

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

Java 在rabbitmq中未确认的1长度队列中的消息会发生什么情况?,java,rabbitmq,message-queue,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, a

因此,我声明了一个长度为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);
Mapargs=newhashmap();
参数放置(“x最大长度”,1);
queueDeclare(“myqueue”,false,false,false,args);
channel.basicConsume(“我的队列”,false,消费者);

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

RabbitMQ无法删除已传递给使用者的消息。如果使用者决定确认消息,则RabbitMQ将等待来自使用者的ack/nack或reject,以决定如何处理所述消息

传递给使用者的消息不计入队列长度

从文档中:

在所有情况下,均使用就绪消息的数量;未确认的邮件不计入限额


假设你在机场排队,然后轮到你办理登机手续,你不再排队了,如果有人问你排队的长度,这个人不会考虑你。RabbitMQ在队列长度方面也做了类似的事情。

感谢您的回答,但是我通过不发送ack实现了我的目的,然后我使用了basicGet,而不是使用basicConsume,它现在将队列用作长度1,并始终保存最新消息。