Có ai biết nếu có cách kiểm tra số lượng thư trong hàng đợi RabbitMQ từ ứng dụng khách không?Kiểm tra kích thước hàng đợi RabbitMQ từ máy khách
Tôi đang sử dụng thư viện máy khách .NET.
Có ai biết nếu có cách kiểm tra số lượng thư trong hàng đợi RabbitMQ từ ứng dụng khách không?Kiểm tra kích thước hàng đợi RabbitMQ từ máy khách
Tôi đang sử dụng thư viện máy khách .NET.
Bạn thực sự có thể truy xuất thông qua ứng dụng khách. Khi thực hiện thao tác queue_declare
, RabbitMQ trả về một bộ ba chứa (<queue name>, <message count>, <consumer count>)
. Đối số passive
cho queue_declare cho phép bạn kiểm tra xem hàng đợi tồn tại mà không sửa đổi trạng thái máy chủ. Vì vậy, bạn có thể sử dụng queue_declare
với tùy chọn passive
để kiểm tra độ dài hàng đợi. Không chắc chắn về .NET, nhưng trong Python nó trông giống như sau:
name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)
tôi 2 năm quá muộn nhưng tôi đã tìm kiếm nó bản thân mình và tìm thấy RabbitMQ cung cấp cho u kịch bản đơn giản để giao tiếp với các nút erlang .. của nó trong thư mục sbin nơi kịch bản bắt đầu cho RabbitMQ là located..so về cơ bản bạn có thể nói
./rabbitmqctl list_queues
này sẽ hiển thị hàng đợi cùng với số lượng tin nhắn đang chờ để những hàng đợi tương tự bạn cũng có thể nói
./rabbitmqctl list_channels
./rabbitmqctl list_connections
, vv Để biết thêm thông bạn có thể truy cập here
Cập nhật: có vẻ như việc thực hiện pika của queue_declare (..) đã thay đổi kể từ khi bài rất hữu ích mmalone của.
Trong trăn/pika (v0.9.5), bạn vẫn có thể kiểm tra chiều sâu hàng đợi qua pika, nhưng nó đòi hỏi một cách tiếp cận gián tiếp hơn một chút.
queue_declare (...) chuyển đối tượng phương thức vào hàm gọi lại, sau đó bạn có thể kiểm tra. Ví dụ, để kiểm tra số tin nhắn và người tiêu dùng trong hàng đợi tên 'myQueue'
:
def cbInspect(qb):
messagesInQueue = qb.method.message_count
print "There are %d messages in myQueue" % messagesInQueue
consumersInQueue = qb.method.consumer_count
print "There are %d consumers in myQueue" % consumersInQueue
return
myChannel = channel.queue_declare(callback=cbInspect, queue='myQueue', passive=True)
Hope this helps, và hãy đi dễ dàng trên tôi, tôi mới ở đây :-)
channel.queue_declare trả về một đối tượng chứa số lượng tin nhắn hiện tại vì vậy nếu bạn muốn tránh gọi lại, bạn cũng có thể truy cập số lượng tin nhắn như thế này: myChannel.method.message_count – corford
Nếu bạn muốn làm điều này trong .Net, kiểm tra phiên bản của thư viện Client mà bạn đang sử dụng.
Tôi đang sử dụng phiên bản 2.2.0 và tôi đã phải sử dụng BasicGet (hàng đợi, noAck).
Trong phiên bản này của thư viện QueueDeclare() chỉ trả về một chuỗi có chứa tên hàng đợi.
BasicGetResult result = channel.BasicGet("QueueName", false);
uint count = result != null ? result.MessageCount : 0;
Tôi biết từ phiên bản 2.6.1 , QueueDeclare() trả về một đối tượng kiểu QueueDeclareOk.
QueueDeclareOk result = channel.QueueDeclare();
uint count = result.MessageCount;
Ngoài ra, bạn có thể gọi từ dòng lệnh:
<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues
Và bạn nhìn thấy đầu ra sau đây:
hàng đợi danh ...
QueueName 1
. ..làm xong.
HTH
Tôi đang sử dụng phiên bản 3.3.1 của Thư viện Net Client.
Tôi sử dụng phần sau, rất giống với gợi ý thứ hai của Ralph Willgoss nhưng bạn có thể cung cấp tên hàng đợi làm đối số.
QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;
Bạn có thể sử dụng phương pháp MessageCount của IModel, tài liệu ở đây
chỉnh sửa: Tôi biết đây là một bài rất cũ, nhưng nó là phản ứng đầu tiên của Google, và tôi hy vọng nó sẽ giúp mọi người tìm kiếm câu trả lời này trong tương lai.
Đây là lần đầu tiên tôi thấy điều này được đề cập. Tại sao vậy?!! – Theyouthis
Ít nhất là của RabbitMQ 3.3.5, bạn có thể làm điều này trong một chương trình C# mà không cần bất kỳ thư viện RabbitMQ khách hàng bằng cách gọi API RabbitMQ Quản lý HTTP:
// The last segment of the URL is the RabbitMQ "virtual host name".
// The default virtual host name is "/", represented urlEncoded by "%2F".
string queuesUrl = "http://MY_RABBITMQ_SERVER:15672/api/queues/%2F";
WebClient webClient = new WebClient { Credentials = new NetworkCredential("MY_RABBITMQ_USERNAME", "MY_RABBITMQ_PASSWORD") };
string response = webClient.DownloadString(queuesUrl);
Tên người dùng và mật khẩu cũng giống như những bạn sử dụng để đăng nhập vào giao diện người dùng giao diện điều khiển quản lý RabbitMQ.
Trả lời sẽ là một chuỗi JSON có danh sách hàng đợi, bao gồm số lượng thư của họ, trong số các thuộc tính khác. (Nếu bạn thích, bạn có thể deserialize rằng JSON vào một đối tượng C# bằng cách sử dụng một thư viện như Json.NET.)
Tài liệu API được cài đặt cùng với bảng điều khiển quản lý RabbitMQ và sẽ có sẵn trên máy chủ đó tại http://MY_RABBITMQ_SERVER:15672/api.
đoạn mã nhỏ của tôi dựa trên câu trả lời của Myydrralls. Tôi nghĩ nếu anh ta có mã trong câu trả lời của mình, tôi có thể nhận thấy nó nhanh hơn nhiều.
public uint GetMessageCount(string queueName)
{
using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
return channel.MessageCount(queueName);
}
}
Đây phải là câu trả lời được chấp nhận, ngay cả khi anh ấy bỏ lỡ Basic.Get làm nguồn thứ hai của thông tin này. –
Chan ở đây là gì và cách nhập nó? – Kishan
Đây không còn là cách tốt nhất để làm điều đó. – Theyouthis