Qualcuno sa se esiste un modo per controllare il numero di messaggi in una coda RabbitMQ da un'applicazione client?Controllare la dimensione della coda RabbitMQ dal client
Sto usando la libreria client .NET.
Qualcuno sa se esiste un modo per controllare il numero di messaggi in una coda RabbitMQ da un'applicazione client?Controllare la dimensione della coda RabbitMQ dal client
Sto usando la libreria client .NET.
È possibile recuperarlo tramite il client. Quando si esegue un'operazione queue_declare
, RabbitMQ restituisce una tre tupla contenente (<queue name>, <message count>, <consumer count>)
. L'argomento passive
per queue_declare consente di verificare se esiste una coda senza modificare lo stato del server. Quindi puoi usare queue_declare
con l'opzione passive
per controllare la lunghezza della coda. Non sei sicuro di .NET, ma in Python sembra qualcosa di simile:
name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)
I am 2 anni di ritardo, ma ero alla ricerca di me stesso e ho trovato che RabbitMQ u dà semplice script per comunicare ai nodi Erlang .. la sua nella cartella sbin in cui lo script di partenza per RabbitMQ è located..so si può sostanzialmente dire
./rabbitmqctl list_queues
questo visualizzerà le code lungo con il conteggio dei messaggi in sospeso per queste code Allo stesso modo si può anche dire
./rabbitmqctl list_channels
./rabbitmqctl list_connections
ecc Per maggiori informazioni si può visitare here
Aggiornamento: sembra che l'attuazione di Pika queue_declare (..) è cambiato da molto utile post di mmalone.
In python/pika (v0.9.5) è ancora possibile controllare la profondità della coda tramite pika, ma richiede un approccio leggermente più indiretto.
queue_declare (...) passa un oggetto metodo nella sua funzione di richiamata, che è possibile esaminare. Ad esempio, per controllare il numero di messaggi e dei consumatori nella coda di nome '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)
Spero che questo aiuti, e vi prego di andarci piano con me, io sono nuovo da queste parti :-)
channel.queue_declare restituisce un oggetto che contiene il numero di messaggi corrente, quindi se si desidera evitare una richiamata, è anche possibile accedere al conteggio dei messaggi in questo modo: myChannel.method.message_count – corford
Se volevo farlo in .Net, controlla quale versione della libreria Client stai usando.
Sto usando la versione 2.2.0 e ho dovuto utilizzare BasicGet (queue, noAck).
In questa versione della libreria, QueueDeclare() restituisce solo una stringa contenente il nome della coda.
BasicGetResult result = channel.BasicGet("QueueName", false);
uint count = result != null ? result.MessageCount : 0;
So dalla versione 2.6.1 , QueueDeclare() restituisce un oggetto di tipo QueueDeclareOk.
QueueDeclareOk result = channel.QueueDeclare();
uint count = result.MessageCount;
In alternativa, è possibile chiamare da linea di comando:
<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues
e si vede il seguente output:
Listing code ...
QueueName 1
. ..fatto.
HTH
Sto utilizzando la versione 3.3.1 della Biblioteca client .NET.
Io uso il seguente, che è molto simile al secondo suggerimento di Ralph Willgoss ma è possibile fornire il nome della coda come argomento.
QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;
È possibile utilizzare il metodo MessageCount del IModel, documentato qui
edit: So che questo è un post molto vecchio, ma è la prima risposta di Google, e spero lo farà aiutare le persone a cercare questa risposta in futuro.
Questa è la prima volta che ho visto questo menzionato. Perché?!! – Theyouthis
Almeno a partire dal RabbitMQ 3.3.5, si può fare questo in un programma C# senza libreria client RabbitMQ chiamando l'API di gestione RabbitMQ 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);
Il nome utente e la password sono gli stessi di quelli si utilizza per accedere all'interfaccia utente della console di gestione RabbitMQ.
La risposta sarà una stringa JSON con l'elenco di code, incluso il conteggio dei messaggi, tra le altre proprietà. (Se si desidera, è possibile deserializzare che JSON in un oggetto C# utilizzando una libreria come Json.NET.)
La documentazione API viene installato insieme alla console di gestione RabbitMQ e dovrebbe essere disponibile sul server a http://MY_RABBITMQ_SERVER:15672/api.
il mio piccolo frammento basato sulla risposta di Myydrralls. Penso che se avesse il codice nella sua risposta avrei potuto notarlo molto più velocemente.
public uint GetMessageCount(string queueName)
{
using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
return channel.MessageCount(queueName);
}
}
Questa dovrebbe essere la risposta accettata, anche se ha mancato Basic.Get come seconda fonte di queste informazioni. –
Cos'è il chan qui e come importarlo? – Kishan
Questo non è più il modo migliore per farlo. – Theyouthis