简单的问题,但谷歌或Pika开源代码没有帮助。有没有办法查询皮卡当前的队列大小(项目计数器)?Pika获得队列大小(AMQP Python)
回答
有两种方式来获得在AMQP协议队列的大小。您可以使用Queue.Declare或Basic.Get。
如果您在使用Basic.Consume时消息正在消耗,那么除非断开连接(超时)并重新声明队列,否则您将无法获取此信息,或者收到一条消息但未确认。在较新版本的AMQP中,您可以主动重新发送消息。
至于鼠兔,我不知道具体细节,但对AMQP Python的客户一直在我的眼中钉。通常,您需要monkeypatch类才能获取所需信息,或者允许队列使用者超时,以便可以按照记录统计信息的周期间隔执行其他操作,或查找队列中有多少个消息。
解决这个另一种方式是放弃,并使用管道类运行sudo rabbitmqctl list_queues -p my_vhost
。然后解析输出以查找所有队列的大小。如果你这样做,你需要配置/etc/sudoers
不要求通常的sudo密码。
我祈求别人更多的经验,鼠兔通过指出你如何能做到的一切,我所提到的事情,在这种情况下,我会下载鼠兔和浅尝辄止回答了这个。但是,如果没有发生这种情况,并且您难以单独对Pika代码进行编码,请查看haigha
。我发现他们的代码比其他Python AMQP客户端库更直接,因为他们更贴近AMQP协议。
我知道这个问题是有点老了,但这里是高原鼠兔与这样的一个例子。
关于AMQP和RabbitMQ,如果您已经声明了该队列,则可以重新声明该队列,其中passive flag开启并保持所有其他队列参数相同。对此声明declare-ok的响应将包括队列中的消息数量。
下面是一个例子用鼠0.9.5:
import pika
def on_callback(msg):
print msg
params = pika.ConnectionParameters(
host='localhost',
port=5672,
credentials=pika.credentials.PlainCredentials('guest', 'guest'),
)
# Open a connection to RabbitMQ on localhost using all default parameters
connection = pika.BlockingConnection(parameters=params)
# Open the channel
channel = connection.channel()
# Declare the queue
channel.queue_declare(
callback=on_callback,
queue="test",
durable=True,
exclusive=False,
auto_delete=False
)
# ...
# Re-declare the queue with passive flag
res = channel.queue_declare(
callback=on_callback,
queue="test",
durable=True,
exclusive=False,
auto_delete=False,
passive=True
)
print 'Messages in queue %d' % res.method.message_count
这将打印以下内容:
<Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])>
<Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])>
Messages in queue 0
你从message_count
成员的邮件数量。
非常感谢。你的回答对我有帮助。 – Evgeniy
以下是如何使用pika获取队列长度(考虑您在本地主机上使用默认用户和密码) 用您的队列名称替换q_name。
import pika
connection = pika.BlockingConnection()
channel = connection.channel()
q = channel.queue_declare(q_name)
q_len = q.method.message_count
- 1. 消耗两个队列rabbitmq pika python
- 2. 向AMQP队列发送大量消息
- 3. 春季队列大小AMQP Java客户端
- 4. RabbitMQ - 如何获取队列大小
- 5. Resque队列大小
- 6. 负队列大小
- 7. 如何从c#客户端获得RabbitMQ队列大小?
- 8. PrimeFaces FileUpload队列大小
- 9. Selenium Grid:Hub的队列大小?
- 10. Redis命令队列大小
- 11. 演员队列的最大大小?
- 12. AMQP - 队列中有多少消费者?
- 13. 无法获得python列表的大写或小写
- 14. Oracle获得列数据大小
- 15. 获得TIBCO EMS队列
- 16. 有没有办法通过pika列出rabbitmq中的队列?
- 17. 如何获得文件大小小于500mb的文件列表?
- 18. 增加队列大小并找到最短队列
- 19. 环形阵列支持的队列调整大小/排队
- 20. 获得Backbone集合大小?
- 21. 消息队列:选择和大小
- 22. 询问ActiveMQ队列的峰值大小
- 23. 后缀限制队列大小
- 24. 创建后Azure队列更改大小
- 25. 事后库存/队列大小查询
- 26. 一个java ServerSocket的队列的大小
- 27. 卡夫卡检查队列大小
- 28. 增加Elasticsearch队列的大小?
- 29. MSMQ专用队列大小限制
- 30. 队列调整大小的方法
感谢您的sudo rabbitmqctl list_queues -p my_vhost技巧,我会尽力而为。 – Sebastian