如何排除像Azure Storage Explorer这样的队列消息?

时间:2018-11-22 16:16:26

标签: azure azure-storage azure-queues

我们的代码只是一些在线教程中的复制粘贴,用于从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)

当我使用存储资源管理器打开队列时,可以看到资源管理器将不显示任何消息,而是显示状态文本“ 显示199条消息中的0条”。因此,存储资源管理器必须以某种方式知道这些消息不正确(已过期或类似)。

我是否可以检索某些状态以查看消息的状态,或者任何人都知道Storage Explorer如何决定显示消息?

1 个答案:

答案 0 :(得分:1)

存储资源管理器准确显示信息,它从存储帐户/仿真器中检索到什么。

displaying 0 of 199 messages表示消息暂时不可见,因为它们已经出队并正在处理,这是队列消息的功能,一旦队列触发器从队列中获取消息,存储服务就会自动对其进行处理。参见Storage queue doc

  

通常,当使用者通过“获取消息”检索消息时,通常会保留该消息以供删除,直到可见性超时间隔到期为止,但是这种行为无法保证。可见性超时间隔到期后,该消息再次对其他使用者可见。

关于问题

  

被困在队列中,我们的队列触发器从未被触发

如果我理解正确,则您从某些教程中获得的代码是自定义的队列触发程序,可能无法保证行为。看一下Azure Function Queuetrigger示例。