我有一个.net core 2 WebAPI,它将文件路径写入RabbitMQ队列,然后打开一个进程,该进程使用这些消息并对这些文件进行一些后台处理,这可能需要一些时间才能完成。
我有这个代码片段,告诉我队列是空的,但是由于每条消息都可能需要一些时间才能完成,因此这是一个误报,因此我无法将其用于此目的:
public bool HasMessages(string queueName)
{
return channel.QueueDeclare(
queue: queueName,
durable: false,
exclusive: false,
autoDelete: false
).MessageCount > 0;
}
在继续编写代码之前,是否有办法知道何时已确认该队列的所有消息?
答案 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交互的非常有用的功能。