C # RabbitMQ - Как узнать, когда все сообщения были подтверждены - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть .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 голосов
/ 18 сентября 2018

Если подключаемые модули управления RabbitMQ включены и у вас есть безопасный маршрут, вы можете использовать HTTP-API RabbitMQ, который предоставит вам всю мета-информацию о вашем сервере RabbitMQ.

Теперь для получения неподтвержденных сообщений вы можете запросить следующий URL, который вернет JSON в качестве ответа, содержащего количество неподтвержденных сообщений.

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

В ответе на вышеуказанный URL будет свойство messages_unacknowledged, которое возвращает количество неподтвержденных сообщений.

Если вы не хотите вызывать этот URL через HttpClient в C #, тогда вы можете использовать EasyNetQ , который обеспечивает очень полезную функциональность для взаимодействия с RabbitMQ HTTP API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...