我们的代码只是一些在线教程中的复制粘贴,用于从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如何决定显示消息?
答案 0 :(得分:1)
存储资源管理器准确显示信息,它从存储帐户/仿真器中检索到什么。
displaying 0 of 199 messages
表示消息暂时不可见,因为它们已经出队并正在处理,这是队列消息的功能,一旦队列触发器从队列中获取消息,存储服务就会自动对其进行处理。参见Storage queue doc。
通常,当使用者通过“获取消息”检索消息时,通常会保留该消息以供删除,直到可见性超时间隔到期为止,但是这种行为无法保证。可见性超时间隔到期后,该消息再次对其他使用者可见。
关于问题
被困在队列中,我们的队列触发器从未被触发
如果我理解正确,则您从某些教程中获得的代码是自定义的队列触发程序,可能无法保证行为。看一下Azure Function Queuetrigger示例。