当前位置: 首页 > 面试题库 >

获取RabbitMQ队列中的消息数

杜晨朗
2023-03-14
问题内容

我们正在使用amqplib来发布/使用消息。我希望能够读取队列中的消息数(理想情况下是已确认和未确认)。这将使我能够向管理员用户显示良好的状态图,并检测某个组件是否无法满足负载需求。

我在amqplib文档中找不到有关读取队列状态的任何信息。

有人可以指出我正确的方向吗?


问题答案:

使用皮卡:

import pika

pika_conn_params = pika.ConnectionParameters(
    host='localhost', port=5672,
    credentials=pika.credentials.PlainCredentials('guest', 'guest'),
)
connection = pika.BlockingConnection(pika_conn_params)
channel = connection.channel()
queue = channel.queue_declare(
    queue="your_queue", durable=True,
    exclusive=False, auto_delete=False
)

print(queue.method.message_count)

使用PyRabbit:

from pyrabbit.api import Client
cl = Client('localhost:55672', 'guest', 'guest')
cl.get_messages('example_vhost', 'example_queue')[0]['message_count']

使用HTTP

句法:

curl -i -u user:password http://localhost:15672/api/queues/vhost/queue

例:

curl -i -u guest:guest http://localhost:15672/api/queues/%2f/celery

注意:默认虚拟主机是/需要转义为%2f

使用CLI:

$ sudo rabbitmqctl list_queues | grep 'my_queue'


 类似资料:
  • 在队列选项卡的rabbitMQ web界面上,我看到了“概述”面板,我在其中找到了以下内容: 排队消息: 准备好了 未确认 总数 我猜“总数”是多少。但什么是“准备就绪”和“未确认”?“准备好了”——传递给消费者的信息?“未确认”-? 消息费率: 发表 交付 重新交付 承认 这些信息是什么?尤其是“重新交付”和“确认”?这是什么意思?

  • 我将与一起使用中的这个库。所有使用者均为,所有队列均为(4小时)。 我有很多队列没有任何挂起的ack,但仍然保存着数百条消息。此外,队列不会在应该过期时过期,这将在几天后产生性能问题。我没有找到任何理由来解释为什么消息在ack处理之后仍然在队列中。 谢谢 管理工具中的一些快照:

  • 我发送消息从JavaSpring Boot应用程序到消费者是Python应用程序。 除了输入命令rabbitmqctl list\u queues时,一切正常,它显示视频队列0,这意味着队列中没有消息。 消费者正在接收消息并执行一些长过程;所以如果我连续发送多条消息,应该会有一些消息在队列中等待。我说得对吗? 制片人: 消费者 在哪里可以看到我声明的队列上的消息?因为虽然我知道队列中有消息,但使用

  • 可靠消费 Redis:没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理 RabbitMQ:具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费 可靠发布 Reids:不提供,需自行实现 Redis的消息队列,如果在从队列pop出去的时候,worker处理失败的话,数据不会回到队列中,需要从业务中手动把失败的处理数据p

  • 主要内容:1 RabbitMQ 的概念,2 四大核心概念,3 RabbitMQ 核心部分,4 各个名词介绍,5 安装1 RabbitMQ 的概念 RabbitMQ 是一个消息中间件:接收并转发消息。 你可以把它当作一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的包裹送到收件人那里。按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件 RabbitMQ 与快递站的主要区别在于,不处理快件,而是接收、存储、转发消息数据 2 四大核心概念 生产者 产生数据

  • 我希望能够在Rabbit中移动队列之间的消息(手动)。 例如: 我对rabbitmq和amqp还是个新手,但一直找不到关于如何做到这一点的文档(如果可能的话)。 多谢了。