C#RabbitMQ-如何知道何时确认所有消息

时间:2018-09-18 06:07:47

标签: c# rabbitmq

我有一个.net core 2 WebAPI,它将文件路径写入RabbitMQ队列,然后打开一个进程,该进程使用这些消息并对这些文件进行一些后台处理,这可能需要一些时间才能完成。

我有这个代码片段,告诉我队列是空的,但是由于每条消息都可能需要一些时间才能完成,因此这是一个误报,因此我无法将其用于此目的:

public bool HasMessages(string queueName)
{
    return channel.QueueDeclare(
                        queue: queueName,
                        durable: false,
                        exclusive: false,
                        autoDelete: false
                    ).MessageCount > 0;
}

在继续编写代码之前,是否有办法知道何时已确认该队列的所有消息?

1 个答案:

答案 0 :(得分:1)

如果启用RabbitMQ管理插件并且您具有安全的路由,则可以利用RabbitMQ HTTP API,该API将为您提供有关RabbitMQ服务器的所有元信息。

现在要获取未确认的消息,您可以查询以下URL,该URL将返回JSON作为响应,其中包含未确认的消息计数。

http://username:password@rabbitmq_server_name:15672/api/queues/vhost_name/queue_name/

在上述URL的响应中,将有一个属性messages_unacknowledged,该属性将返回未确认的消息计数。

如果您不想在C#中通过HttpClient调用此URL,则可以使用EasyNetQ,它提供了与RabbitMQ HTTP API交互的非常有用的功能。