0
votes

Our code is just a copy paste from some online tutorial in getting the messages from an azure storage queue.

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;
        }

However, we found that randomly some messages may get stuck in the queue and our queue trigger never got fired.

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

When I open my queue with storage explorer, I can see the explorer will not show any message, instead just display a status text "displaying 0 of 199 messages". So storage explorer must somehow know that these messages are not right (expired or something).

Is there some status I can retrieve to see the status of the message or anyone know how storage explorer decide to show a message or not?

1

1 Answers

1
votes

Storage explorer shows info exactly what it retrieves from Storage account/emulator.

displaying 0 of 199 messages means the messages are invisible for now because they have been dequeued and being processed, it's a feature of queue message and handled by Storage service automatically once your queue trigger gets messages from a queue. See Storage queue doc.

Typically, when a consumer retrieves a message via Get Messages, that message is usually reserved for deletion until the visibilitytimeout interval expires, but this behavior is not guaranteed. After the visibilitytimeout interval expires, the message again becomes visible to other consumers.

As for the problem

get stuck in the queue and our queue trigger never got fired

If I understand correctly, your code from some tutorial is a custom queuetrigger, which may have no guarantee on the behavior. Have a look at Azure Function Queuetrigger example.