2017-02-01 4 views
1

Ich versuche, die Gesamtzahl der Verbraucher für eine bestimmte Warteschlange in RabbitMQ abzurufen. Ich schrieb meinen Code in C# mit dem RabbitMQ-Client für .Net.Abruf der Anzahl der Benutzer von RabbitMQ

string user = ConfigurationManager.AppSettings["rmq_user"]; 
string pword = ConfigurationManager.AppSettings["rmq_pass"]; 
string port = ConfigurationManager.AppSettings["rmq_port"]; 
string host = new Uri(ConfigurationManager.AppSettings["rest_api_url"]).Host; 
var factory = new ConnectionFactory(); 
factory.Uri = "amqp://" + user + ":" + pword + "@" + host + ":" + port; 
using (var connection = factory.CreateConnection()) 
{ 
    using (var channel = connection.CreateModel()) 
    { 
     var consumerCount = ((RabbitMQ.Client.Impl.ModelBase)(channel)).m_consumers; 
    } 
} 

Ich erhalte var consumerCount = ((RabbitMQ.Client.Impl.ModelBase)(channel)).m_consumers; als 0 jedoch kann ich die Verbraucher in dem RabbitMQ Netz sehen und ich habe dafür gesorgt, dass die Verbraucher in dieser Warteschlange existieren. Ist dies der richtige Weg, um den Verbraucher zu zählen oder mache ich etwas falsch? Ich weiß, dass dies mit RabbitMQ admin getan werden kann, aber ich muss es in C# tun. Bitte lassen Sie mich wissen, wenn ich weitere Details angeben kann.

Antwort

1

Es funktioniert nicht, da Sie nicht die Warteschlange angegeben haben, für die Sie die Verbraucher möchten.

Sie können es wie folgt:

using (var connection = factory.CreateConnection()) 
     { 

      using (var channel = connection.CreateModel()) 
      { 
       var queueDeclareOK = channel.QueueDeclarePassive(QueueName); 
       var consumerCount = queueDeclareOK.ConsumerCount; 
      } 
     } 
+0

channel.QueueDeclare (warteschlange, wahr, falsch, falsch, null); erstellt eine neue Warteschlange oder wird die vorhandene Warteschlange verwendet? Wird es auch alle Nachrichten entfernen? –

+0

Es wird eine Warteschlange erstellt, wenn sie nicht vorhanden ist. Sonst wird es nichts tun. Es werden auch keine Nachrichten aus der Warteschlange entfernt. – pratikvasa

+0

Ich erhalte diese Ausnahme für eine bestehende Queue: Die AMQP-Operation wurde unterbrochen: AMQP close-reason, initiiert von Peer, code = 406, text = "PRECONDITION_FAILED - ungleiches arg 'x-dead-letter- exchange "für die Warteschlange" ev.ae.se.q.automation.HR 'in vhost'/': empfangen keine, aber aktuell ist der Wert' ev.ae.se.x.fallout 'vom Typ' longstr '", classId = 50, methodId = 10, cause = Aber wenn ich mit einer nicht existierenden Queue versuche, erstellt sie die neue Queue und arbeitet auch beim zweiten Mal fehlerfrei. –

0

Siehe IModal.ConsumerCount() auf docs

Verwandte Themen