首先:使用 Azure 存储队列,您应该准备好所有操作都是幂等的:如果您的队列项被多次处理,则每次都应该发生相同的结果。我提出这个问题的原因:根本无法保证您会处理一次消息(除非您检查DequeueCount
消息的属性并相应地停止处理),因为您的角色实例崩溃/重启或您的队列项目处理代码做一些意想不到的事情,比如抛出异常。
Next: 队列消息不可见超时可以通过编程方式进行扩展。这可以通过队列 api 或通过一种语言 sdk 来完成。在 c# 中(类似这样 - 我没有测试这个),再延长一分钟:
queueMessage.UpdateMessage(message,
TimeSpan.FromSeconds(60),
MessageUpdateFields.Visibility);
您还可以沿途修改消息(也许作为对代码的提示,让您知道 5 个报告中的哪一个已完成。这应该有助于您的具体问题:如果消息被重新处理,您不需要如果消息已被修改为“ process reports from 3-5
”),则必须处理所有五个报告。注意:您可以MessageUpdateFields
通过以下方式组合标志|
:
queueMessage.UpdateMessage(message,
TimeSpan.FromSeconds(0),
MessageUpdateFields.Content);
最后:如果您关心处理一批报告所花费的时间长度,或许可以重新考虑一下为什么要在每条消息中处理五个报告,而不是每条消息一个报告。您始终可以批量读取队列消息。这有点主观,因为确实没有正确或错误的方法,但这只是您需要考虑的事情。