Azure 存储队列用于存储可能由 Azure Webjob、WorkerRole 等使用的消息。Azure Webjobs SDK 提供了一种与 Azure 存储(包括队列、表存储、Blob 和服务总线)交互的简单方法。话虽如此,您还可以拥有一个不使用 Webjobs SDK 且不与 Azure 存储交互的 Azure Webjob。事实上,我确实运行了一个与 SQL Azure 数据库交互的 Webjob。
我将简要解释 Webjobs SDK 如何与 Azure 队列交互。一旦消息到达队列(或变为“可见”,稍后会详细介绍),Webjob 中的功能就会被触发(假设您在连续模式下运行)。如果该函数返回没有错误,则删除该消息。如果出现问题,消息将返回队列再次处理。您可以相应地处理失败的消息。这是有关如何执行此操作的示例。
SDK 将调用一个函数最多 5 次来处理队列消息。如果第五次尝试失败,则将消息移动到有害队列。最大重试次数是可配置的。
关于可见性,当您将消息添加到队列时,有一个可见性超时属性。默认为零。因此,如果您想在将来处理一条消息,您可以通过将此属性设置为所需的值来完成(最多在未来 7 天)。
可选的。如果指定,则必须使用 2011-08-18 或更高版本的 x-ms-version 发出请求。如果未指定,则默认值为 0。指定新的可见性超时值,以秒为单位,相对于服务器时间。新值必须大于等于 0,且不能大于 7 天。消息的可见性超时不能设置为晚于到期时间的值。visibilitytimeout 应设置为小于生存时间值的值。
现在为您的应用提供建议。
- 我只想为您要完成的每项任务向队列中添加一条消息。该消息显然将具有相关信息进行处理。如果您需要计划多个任务,您可以运行计划的 Web 作业(根据您选择的计划)将消息添加到队列中。然后,您的连续 Webjob 将接收该消息并进行处理。
- 为进入队列的每条消息添加一个 GUID。将该 GUID 存储在应用程序的某个其他域(数据库)中。因此,当您将消息出列以进行处理时,您要做的第一件事是检查您的数据库是否需要处理该消息。如果您需要取消消息的执行,而不是将其从队列中删除,只需更新数据库中的 GUID。
这里有更多信息。
希望这可以帮助,