我希望有人能够澄清有关 Azure 存储队列及其与 WebJobs 交互的一些事情:
要执行重复的后台任务(即添加到队列一次,然后以设定的时间间隔重复),是否有一种方法可以更新 QueueTrigger 函数中传递的相同消息,以便可以扩展其租约(可见性)作为重新排队和避免的方法到期?
通过上述重复后台作业的模式,我还试图找出一种“按需”删除/过期作业的方法。由于这在 WebJobs 上下文之外似乎不可能,因此我考虑将要删除的消息的 messageId 和 popReceipt 存储在表存储中作为持久缓存,然后在 QueueTrigger 函数中传递消息时执行查找表以执行删除消息,以便不再重复该消息。
如有任何建议或提示,我们将不胜感激。干杯:)
Azure 存储队列用于存储 Azure Webjob、WorkerRole 等可能使用的消息。Azure Webjobs SDK 提供了一种与 Azure 存储(包括队列、表存储、Blob 和服务总线)交互的简单方法。话虽如此,您还可以拥有不使用 Webjobs SDK 且不与 Azure 存储交互的 Azure Webjob。事实上,我确实运行了一个与 SQL Azure 数据库交互的 Webjob。
我将简要解释 Webjobs SDK 如何与 Azure 队列交互。一旦消息到达队列(或变得“可见”,稍后会详细介绍),Webjob 中的函数就会被触发(假设您正在连续模式下运行)。如果该函数返回且没有错误,则该消息将被删除。如果出现问题,消息将返回队列再次处理。您可以对失败的消息进行相应的处理。Here http://azure.microsoft.com/en-gb/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#poison是一个关于如何执行此操作的示例。
SDK 将调用函数最多 5 次来处理队列消息。如果第五次尝试失败,则该消息将移至有害队列。最大重试次数是可配置的。
关于可见性,当您向队列添加消息时,存在可见性超时属性。默认为零。因此,如果您想在将来处理消息,可以通过将此属性设置为所需值来实现(最多在将来 7 天)。
选修的。如果指定,则必须使用 2011-08-18 或更高版本的 x-ms-version 发出请求。如果未指定,则默认值为 0。指定相对于服务器时间的新可见性超时值(以秒为单位)。新值必须大于或等于0,并且不能大于7天。消息的可见性超时不能设置为晚于到期时间的值。可见性超时应设置为小于生存时间值的值。
现在为您的应用程序提供建议。
- 我只会为您想要完成的每项任务添加一条消息到队列中。该消息显然包含要处理的相关信息。如果您需要计划多个任务,您可以运行计划的 Web 作业(按照您选择的计划)将消息添加到队列中。然后,您的连续 Webjob 将获取该消息并对其进行处理。
- 向进入队列的每条消息添加 GUID。将该 GUID 存储在应用程序的其他域(数据库)中。因此,当您将消息出队进行处理时,您要做的第一件事就是检查数据库是否需要处理该消息。如果您需要取消消息的执行,只需更新数据库中的 GUID,而不是将其从队列中删除。
还有更多信息here. https://msdn.microsoft.com/library/azure/dd179346.aspx
希望这可以帮助,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)