как исключить сообщения очереди, такие как обозреватель хранилища Azure?

Наш код - это просто копипаст из какого-то онлайн-руководства по получению сообщений из очереди хранилища 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 сообщений». Таким образом, проводник хранилища должен каким-то образом знать, что эти сообщения неправильные (просрочены или что-то в этом роде).

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


person daxu    schedule 22.11.2018    source источник
comment
Не стесняйтесь спрашивать, есть ли у вас дополнительные вопросы, иначе вы могли бы принять объяснение, чтобы другие могли сослаться на него?   -  person Jerry Liu    schedule 27.11.2018


Ответы (1)


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

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

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

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

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

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

person Jerry Liu    schedule 24.11.2018