在 Azure Webjobs SDK 中设置 nextVisibleTime

Posted

技术标签:

【中文标题】在 Azure Webjobs SDK 中设置 nextVisibleTime【英文标题】:Set nextVisibleTime in Azure Webjobs SDK 【发布时间】:2015-09-23 12:48:05 【问题描述】:

我正在使用 Azure Webjobs 处理来自队列的消息。

我看到 Webjobs SDK 会在 10 分钟后再次处理任何失败的消息,如果失败 5 次,它会将其移动到毒队列 (1)。

我还可以看到队列中消息的 nextVisibleTime,即插入时间后 10 分钟 (2)。

我想使用 AzureSDK 错误处理消息,但我不能等待 10 分钟才能再次处理消息。

有什么方法可以将 nextVisibleTime 设置为几秒钟?

Create a .NET WebJob in Azure App Service

如果方法在完成之前失败,队列消息不会被删除;在 10 分钟的租约到期后,该消息被释放以再次被拾取和处理。

How to use Azure queue storage with the WebJobs SDK

public static void WriteLog([QueueTrigger("logqueue")] string logMessage,
    DateTimeOffset expirationTime,
    DateTimeOffset insertionTime,
    DateTimeOffset nextVisibleTime,

注意:*** 中有类似的问题,但没有答案:

QueueTrigger Attribute Visibility Timeout Azure WebJob QueueTrigger Retry Policy

【问题讨论】:

【参考方案1】:

在最新的 v1.1.0 版本中,您现在可以通过 JobHostConfiguration.Queues.QueueProcessorFactory 注册自己的自定义 QueueProcessor 实例来控制可见性超时。这使您可以全局或按队列/函数控制高级消息处理行为。

例如,要设置失败消息的可见性,您可以覆盖 ReleaseMessageAsync,如下所示:

protected override async Task ReleaseMessageAsync(CloudQueueMessage message, FunctionResult result, TimeSpan visibilityTimeout, CancellationToken cancellationToken)

    // demonstrates how visibility timeout for failed messages can be customized
    // the logic here could implement exponential backoff, etc.
    visibilityTimeout = TimeSpan.FromSeconds(message.DequeueCount);

    await base.ReleaseMessageAsync(message, result, visibilityTimeout, cancellationToken);

更多详情请见release notes here。

【讨论】:

【参考方案2】:

如果在处理您的函数时出现异常,SDK 会立即将消息放回队列并重新处理该消息。您没有看到这种行为吗?

【讨论】:

嗨!是的,我看到了这种行为,但正如我在问题中提到的那样,这条消息只会在 10 分钟后重新处理。我想把这个时间改成 10 秒。 您可以绑定到 CloudQueueMessage 并设置可见性超时,如下所示 public static void Hi([QueueTrigger("invisible")] CloudQueueMessage message) throw new Exception("Hi");

以上是关于在 Azure Webjobs SDK 中设置 nextVisibleTime的主要内容,如果未能解决你的问题,请参考以下文章

Azure WebJobs SDK TimerTrigger 函数未运行

什么是 Azure WebJobs SDK 3.0 版本的 host.Call()

Azure WebJobs SDK - 在啥情况下需要创建 JobHost 对象?

为啥我收到异常 Azure WebJobs SDK Dashboard connection string is missing or empty 当它根本不为空时?

在 Azure 应用配置中设置/添加功能标志

无法加载文件或程序集“Microsoft.Azure.WebJobs.Host,版本=3.0.22.0