RabbitMQ에 EventingBasicConsumer의 수신 이벤트 처리기를 추가했습니다. 대기열이 소비되었는지 (처리되고 비어 있음) 확인해야하며 소비자 및 연결을 닫아야합니다. 대기열이 처리되는지 여부를 알 수있는 조건을 찾을 수 없습니다.래빗 MQ 고객 이벤트 중지 큐가 비어있는 경우
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);
}
}
우리는 큐 길이를 모니터링하고 자동으로 회전 또는 소비자의 수 아래로 응용 프로그램을 . 어쩌면 당신은 그런 것을 원할 것입니까? https://stackoverflow.com/questions/1038318/check-rabbitmq-queue-size-from-client –