У меня есть очередь служебной шины Azure, которую я, возможно, ошибочно использую для хранения идентификаторов представлений определенного элемента.
Каждый раз при получении представления я отправляю сообщение в очередь для последующей обработки.< /p>
Когда наступит позже, я хочу в идеале обработать ВСЕ сообщения в очереди, чтобы можно было пакетно отправить обновление представлений в базу данных.
Кажется, есть несколько вариантов: либо раскрутите ServiceBusProcessor, подпишитесь на ProcessMessageAsync, вызовите awaitprocessor.StartProcessingAsync(); и дайте ему поработать некоторое время, прежде чем вызывать awaitprocessor.StopProcessingAsync();< /code> в то время как в методе, занимающемся обработкой сообщений, пакетно группируются изменения для отправки в базу данных.
Другой вариант — использовать ServiceBusReceiver и вызвать ожидающий получатель.ReceiveMessageAsync (); в цикле до тех пор, пока результат не станет нулевым (насколько я могу судить, это означает, что очередь пуста), одновременно группируя каждое полученное сообщение для обновления базы данных.
Мой вопрос: какой из этих вариантов предпочтительнее другого?
Я знаю, что, используя процессор, мне фактически приходится угадывать, как долго обрабатывать очередь, в надежде, что она будет достаточно длинным, чтобы опустеть, что не совсем идеально, но позволяет мне установить счетчик предварительной выборки, режим приема (я выбрал ReceiveAndDelete) и ConcurrentCalls. Кажется, это повышает общую скорость обработки.
Использование цикла с получателем.ReceiveMessageAsync, кажется, лучше соответствует моему варианту использования, но я не уверен, насколько это надежно исчерпать всю очередь за один раз.
любая помощь/указания очень ценятся.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -in-one-go
Обработка очереди служебной шины Azure для ее очистки за один раз. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение