8

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

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

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

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

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

在 Azure 应用服务中创建 .NET WebJob

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

如何将 Azure 队列存储与 WebJobs SDK 结合使用

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

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

4

2 回答 2

5

在最新的 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);
}

更多详细信息可以在此处的发行说明中找到。

于 2015-12-04T17:20:10.423 回答
0

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

于 2015-07-06T21:16:30.660 回答