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

标签 .net rabbitmq

我在 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/

相关文章:

node.js - 将 RabbitMq 连接到 TCP/IP 服务器

c# - T4 模板和 Assembly.Load

javascript - RabbitMQ。循环发布消息

c# - 我可以使用 RabbitMQ .NET 客户端遍历队列吗?

asp.net-core - SignalR hub 在 ASP.NET Core 中的 RabbitMQ 订阅处理程序中解析为 null

rabbitmq - 如何一次只处理一条给定类型的消息?

c# - dotnet 和 msbuild 中的包之间的区别

.net smtp 监听器

c# - Task.ContinueWith 不适用于 OnlyOnCanceled

c# - ASP.Net Session 数据在页面之间丢失