gpt4 book ai didi

.net - 如果队列为空,则停止 Rabbit MQ 消费者事件

转载 作者:行者123 更新时间:2023-12-04 17:48:18 25 4
gpt4 key购买 nike

我在 RabbitMQ 中添加了 EventingBasicConsumer 的接收事件处理程序。我正在尝试检查队列是否已被消耗(已处理且现在为空),它应该关闭消费者和连接。我找不到可以判断队列是否已处理的条件。

请帮忙

    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);
}
}

最佳答案

我只是创建一个被动队列来查看队列中有多少消息

 private static int passiveDeclareForMessageCount(IModel model)
{

Dictionary<string, object> args = new Dictionary<string, object>();
args.Add("x-queue-mode", "lazy");
int resultCount = 0;
var response = model.QueueDeclarePassive(ConfigurationManager.AppSettings["LocalQueueName"].ToString());
resultCount = (int)response.MessageCount;

return resultCount;
}

关于.net - 如果队列为空,则停止 Rabbit MQ 消费者事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47181423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com