Ich habe eine empfangene Event Handler von EventingBasicConsumer in RabbitMQ hinzugefügt. Ich versuche zu überprüfen, ob die Warteschlange verbraucht (verarbeitet und jetzt leer) ist, sollte es den Verbraucher und die Verbindung zu schließen. Ich kann die Bedingung nicht finden, die feststellen kann, ob die Warteschlange verarbeitet wird.Stop Rabbit MQ Consumer Event Wenn die Warteschlange leer ist
Bitte helfen
public void ProcessQueue(string queueName, Func<string, bool> ProcessMessage)
{
//lock (this.Model)
{
this.Model.BasicQos(0, 1, false);
EventingBasicConsumer consumer = new EventingBasicConsumer(this.Model);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
bool processed = ProcessMessage.Invoke(message);
if (processed)
this.SendAcknowledgement(ea.DeliveryTag);
else
this.StopProcessingQueue(consumer.ConsumerTag);
// Check if no message for next 2 minutes,
// Stop Consumer and close connection
};
this.Model.BasicConsume(queue: queueName,
autoAck: false,
consumer: consumer);
}
}
ist leer Wir haben eine Anwendung, die Länge der Warteschlange überwacht und automatisch dreht sich nach oben oder unten die Anzahl der Verbraucher . Vielleicht willst du so etwas? https://stackoverflow.com/questions/1038318/check-rabbitmq-queue-size-from-client –