Как исключить сообщения очереди, такие как Azure Storage Explorer? - PullRequest
0 голосов
/ 22 ноября 2018

Наш код является просто копией из некоторого онлайн-учебника по получению сообщений из очереди хранения Azure.

public int? GetQueueMessageCount(CloudQueue queue, TextWriter textWriter)
        {
            int? messageCount;
            try
            {
                queue.FetchAttributes();
                // Retrieve the cached approximate message count.
                messageCount = queue.ApproximateMessageCount;
            }
            catch (Exception exception)
            {
                LogHelper.LogInfo(logger, textWriter, $"GetQueueMessageCount failed for {queue.Name}." + exception);
                throw;
            }
            return messageCount;
        }

Однако мы обнаружили, что некоторые сообщения могут случайно застрять в очереди и нашей очереди.триггер не сработал.

 public static void ProcessUnitsForCacheItem(
            [QueueTrigger(QueueClient.RefreshUnitsQueue)] string projectUnitsMessage, TextWriter textWriter)

Когда я открываю свою очередь с помощью проводника хранилища, я вижу, что проводник не отображает никаких сообщений, вместо этого просто отображается текст состояния ", отображающий 0 из 199 сообщений ».Поэтому обозреватель хранилища должен каким-то образом знать, что эти сообщения неверны (истек или что-то в этом роде).

Есть ли какой-либо статус, который я могу получить, чтобы увидеть состояние сообщения, или кто-нибудь знает, как обозреватель хранилища решает показать сообщение илинет?

1 Ответ

0 голосов
/ 24 ноября 2018

Storage Explorer показывает информацию, что именно он получает из учетной записи / эмулятора хранилища.

displaying 0 of 199 messages означает, что сообщения на данный момент невидимы, поскольку они были сняты с обработки и обрабатываются; это особенность сообщения очереди и обрабатывается службой хранения автоматически, как только триггер очереди получает сообщения из очереди.См. Очередь хранения. Doc .

. Обычно, когда потребитель получает сообщение через Get Messages, это сообщение обычно резервируется для удаления, пока не истечет интервал visibilitytimeout, но это не такгарантировано.По истечении интервала времени видимости сообщение снова становится видимым для других потребителей.

Что касается проблемы

застревание в очереди, и наш триггер очереди никогда не срабатывает

Если я правильно понимаю, ваш кодиз некоторого учебника есть пользовательский queuetrigger, который может не иметь никаких гарантий на поведение.Посмотрите на пример Azure Function Queuetrigger .

...