Câu hỏi đơn giản, nhưng Google hoặc mã nguồn mở Pika không giúp được gì. Có cách nào để truy vấn kích thước hàng đợi hiện tại (mục đếm) trong Pika không?Nhận Kích thước Hàng đợi trong Pika (AMQP Python)
Trả lời
Có hai cách để nhận kích thước hàng đợi trong giao thức AMQP. Bạn có thể sử dụng Queue.Declare hoặc Basic.Get.
Nếu bạn đang sử dụng tin nhắn khi họ sử dụng Basic.Consume, bạn không thể nhận được thông tin này trừ khi bạn ngắt kết nối (hết thời gian chờ) và redeclare hàng đợi, hoặc người khác nhận được một tin nhắn nhưng không ack nó. Trong các phiên bản AMQP mới hơn, bạn có thể chủ động yêu cầu thông báo.
Đối với Pika, tôi không biết chi tiết cụ thể nhưng khách hàng Python cho AMQP đã là một cái gai ở bên cạnh tôi. Thông thường, bạn sẽ cần đến các lớp monkeypatch để có được thông tin bạn cần hoặc cho phép người tiêu dùng xếp hàng hết thời gian chờ để bạn có thể thực hiện những việc khác trong khoảng thời gian định kỳ như số liệu thống kê hoặc tìm ra số lượng thư trong hàng đợi.
Một cách khác xung quanh việc này là từ bỏ và sử dụng lớp Ống để chạy sudo rabbitmqctl list_queues -p my_vhost
. Sau đó phân tích đầu ra để tìm kích thước của tất cả các hàng đợi. Nếu bạn làm điều này, bạn sẽ cần phải cấu hình /etc/sudoers
để không yêu cầu mật khẩu sudo thông thường.
Tôi cầu nguyện rằng người khác có nhiều kinh nghiệm Pika trả lời câu hỏi này bằng cách chỉ ra cách bạn có thể làm tất cả những điều tôi đã đề cập, trong trường hợp này tôi sẽ tải xuống Pika và đạp lốp. Nhưng nếu điều đó không xảy ra và bạn gặp khó khăn với việc bắt chước mã Pika, hãy xem haigha
. Tôi thấy mã của họ đơn giản hơn nhiều so với các thư viện máy khách Python AMQP khác vì chúng gắn bó với giao thức AMQP hơn.
Tôi biết rằng câu hỏi này hơi cũ, nhưng đây là một ví dụ về việc làm điều này với pika.
Về AMQP và RabbitMQ, nếu bạn đã khai báo hàng đợi, bạn có thể khai báo lại hàng đợi bằng passive flag và giữ tất cả các thông số hàng đợi khác giống hệt nhau. Câu trả lời cho tuyên bố này declare-ok sẽ bao gồm số lượng thư trong hàng đợi.
Dưới đây là một ví dụ Với 0.9.5 pika:
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
này sẽ in như sau:
<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
Bạn nhận được số tin nhắn từ message_count
thành viên.
Cảm ơn rất nhiều. Câu trả lời của bạn giúp tôi. – Evgeniy
Dưới đây là cách bạn có thể nhận được độ dài hàng đợi bằng cách sử dụng pika (Xem bạn đang sử dụng tên người dùng và mật khẩu mặc định trên máy chủ cục bộ) thay thế tên q_name bằng tên hàng đợi của bạn.
import pika
connection = pika.BlockingConnection()
channel = connection.channel()
q = channel.queue_declare(q_name)
q_len = q.method.message_count
- 1. Kích thước hàng đợi trong Spring AMQP Java client
- 2. hàng đợi kích thước giới hạn
- 3. Mẫu tốt nhất để thiết kế một ứng dụng RPC không đồng bộ bằng Python, Pika và AMQP là gì?
- 4. Biết kích thước của hàng đợi kết nối đang chờ chấp nhận trong GNU/Linux
- 5. Tại sao Hàng đợi của Python trả về kích thước gần đúng trong qsize()?
- 6. Kiểm tra kích thước hàng đợi RabbitMQ từ máy khách
- 7. Nhận kích thước tệp bằng Python?
- 8. Có cách nào để liệt kê hàng đợi trong thỏmq qua pika không?
- 9. Nhận kích thước không nén của tệp .gz trong python
- 10. Tkinter: Đợi mặt hàng trong hàng đợi
- 11. Hàng đợi đa xử lý trong Python
- 12. Kích thước giới hạn của Hàng đợi <T> trong .NET?
- 13. Chờ chặn thu (hàng đợi) để giảm kích thước trong C#
- 14. Hàng kích thước trên không
- 15. MPI_Recv: Nhận kích thước khác với kích thước được gửi
- 16. nhận kích thước tệp trong javascript
- 17. Nhận kích thước tệp lớn trong C
- 18. Nhận kích thước thư mục
- 19. Thuật ngữ chính xác cho hàng đợi FIFO có kích thước cố định là gì?
- 20. Hàng đợi JMS nhận được tin nhắn?
- 21. Nhận hàng đợi công văn hiện tại?
- 22. Truy xuất thư từ hàng đợi RabbitMQ
- 23. cách lấy kích thước hàng mysql trong GB
- 24. Kích thước lô hàng loạt java elasticsearch
- 25. Xác nhận kích thước tải lên tệp
- 26. python có kích thước chuỗi unicode
- 27. Thực hiện AMQP C++
- 28. Cách xóa hàng đợi đa xử lý trong python
- 29. Cách nhận thời lượng, kích thước và kích thước video trong PHP?
- 30. Viết một hàng đợi phân tán trong DynamoDB
Cảm ơn vì sudo rabbitmqctl list_queues -p my_vhost trick, tôi sẽ thử điều đó. – Sebastian