在 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 当它根本不为空时?