Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
RabbitMQ在固定大小队列上的消息数超出预期_Rabbitmq - Fatal编程技术网

RabbitMQ在固定大小队列上的消息数超出预期

RabbitMQ在固定大小队列上的消息数超出预期,rabbitmq,Rabbitmq,我有一个出版商,它向移动马达的消费者发送消息。 马达有一个我无法访问的工作队列,它的工作速度比传入消息的速度慢,所以我试图控制消费者的流量 为了保持更新的和相关的数据到达马达,而不让队列填满并造成交通堵塞,我将RabbitMQ队列大小限制设置为5,将basicQos设置为1 其思想是,RabbitMQ队列在填满时将丢弃旧消息,因此最新的命令位于队列的前端。 另外,通过将basicQos设置为1,我可以确保使用者不会从队列中抓取所有消息并立即轰炸马达,这正是我试图避免的,因为一旦命令发送到马达,我

我有一个出版商,它向移动马达的消费者发送消息。 马达有一个我无法访问的工作队列,它的工作速度比传入消息的速度慢,所以我试图控制消费者的流量

为了保持更新的和相关的数据到达马达,而不让队列填满并造成交通堵塞,我将RabbitMQ队列大小限制设置为5,将basicQos设置为1

其思想是,RabbitMQ队列在填满时将丢弃旧消息,因此最新的命令位于队列的前端。 另外,通过将basicQos设置为1,我可以确保使用者不会从队列中抓取所有消息并立即轰炸马达,这正是我试图避免的,因为一旦命令发送到马达,我就什么也做不了。 这样,使用者从队列中逐个接收消息,而新消息替换队列中的旧消息。 实际上,这将瓶颈移动到RabbitMQ队列,而不是马达队列。 我也不能检查汽车的工作队列,所以所有的交通控制都必须对消费者进行

我添加了messageId并进行了测试,发现在发布服务器关闭后很长一段时间内,仍有许多消息来来往往

我预计关机后大约有5条消息,因为这是队列的大小,但我收到了数百条

我还在回调中添加了几秒钟的睡眠时间,以确保这不是出现问题的机器人队列,但关机后我仍然收到许多消息,我可以在日志中看到回调每次都被调用,因此它肯定仍然从某处收到消息

请帮忙。
谢谢。

将确认移到回调的末尾解决了问题

我猜,通过将basickos设置为1,它确实会一个接一个地执行每条消息的回调,但在后台它一直从队列中获取消息。 因此,即使在发布服务器关闭时,使用者仍然有从队列中获取的消息,这些消息就是我看到正在执行的消息