gpt4 book ai didi

azure - 通过 WebJobs 重新排队或删除 Azure 存储队列中的消息

转载 作者:行者123 更新时间:2023-12-01 11:33:37 26 4
gpt4 key购买 nike

我希望有人能够澄清有关 Azure 存储队列及其与 WebJobs 交互的一些事情:

  1. 要执行重复的后台任务(即添加到队列一次,然后以设定的时间间隔重复),是否有一种方法可以更新 QueueTrigger 函数中传递的相同消息,以便其租约(可见性)可以扩展为重新排队并避免过期的方法?

  2. 通过上述重复后台作业的模式,我还试图找出一种“按需”删除/过期作业的方法。由于这在 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是一个关于如何执行此操作的示例。

The SDK will call a function up to 5 times to process a queue message. If the fifth try fails, the message is moved to a poison queue. The maximum number of retries is configurable.

关于可见性,当您向队列添加消息时,存在可见性超时属性。默认为零。因此,如果您想在将来处理消息,您可以通过将此属性设置为所需的值来实现(最多在将来 7 天)。

Optional. If specified, the request must be made using an x-ms-version of 2011-08-18 or newer. If not specified, the default value is 0. Specifies the new visibility timeout value, in seconds, relative to server time. The new value must be larger than or equal to 0, and cannot be larger than 7 days. The visibility timeout of a message cannot be set to a value later than the expiry time. visibilitytimeout should be set to a value smaller than the time-to-live value.

现在是针对您的应用的建议。

  1. 我只会为您想要完成的每项任务添加一条消息到队列中。该消息显然包含要处理的相关信息。如果您需要计划多个任务,您可以运行计划的 Web 作业(按照您选择的计划)将消息添加到队列中。然后,您的连续 Webjob 将获取该消息并对其进行处理。
  2. 为进入队列的每条消息添加 GUID。将该 GUID 存储在应用程序的其他域(数据库)中。因此,当您将消息出队进行处理时,您要做的第一件事就是检查数据库是否需要处理该消息。如果您需要取消消息的执行,只需更新数据库中的 GUID,而不是将其从队列中删除。

还有更多信息here.

希望这有帮助,

关于azure - 通过 WebJobs 重新排队或删除 Azure 存储队列中的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com