代码之家  ›  专栏  ›  技术社区  ›  Liran Friedman

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

  •  0
  • Liran Friedman  · 技术社区  · 6 年前

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

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

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

    在我继续我的代码之前,是否有方法知道该队列的所有消息何时都已被确认?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Keyur Ramoliya    6 年前

    如果启用了RabbitMQ管理插件并且您拥有安全路由,那么您可以使用rabbitmqhttpapi,它将为您提供关于RabbitMQ服务器的所有元信息。

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

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

    在上述URL的响应中,将有一个属性 messages_unacknowledged

    EasyNetQ 它提供了与rabbitmqhttpapi交互的非常有用的功能。