我正在使用Azure队列保存失败的消息。每个消息在被丢弃之前必须由Azure功能重试10次。我如何确定每次重试之间的延迟?(如果我使用标准行为,则消息在不到一秒的时间内重试10次)
mkshixfv1#
这是带服务总线的Azure Functions的正常行为。如果你需要在重试之间有延迟,则需要实现自定义逻辑,该逻辑可以延迟原始消息,并发送具有延迟的原始消息序列号的计划消息,以便在计划消息出现在队列中并由函数处理时检索该消息。或者,使用支持此功能的第三方库。
iyfamqjs2#
您的问题没有100%说明您是在Azure存储还是Azure服务总线中使用队列。如果您使用Azure存储队列:你可以利用visibilityTimeout配置重试之间的时间。在内部,这将在指定的时间内将消息锁定给当前使用者。如果出错,将不会删除消息,超时后Azure队列将使消息再次可供任何可用的使用者使用。https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue?tabs=in-process%2Cextensionv5%2Cextensionv3&pivots=programming-language-csharp#host-json
visibilityTimeout
{ "version": "2.0", "extensions": { "queues": { "maxPollingInterval": "00:00:02", "visibilityTimeout" : "00:00:30", "batchSize": 16, "maxDequeueCount": 5, "newBatchThreshold": 8, "messageEncoding": "base64" } } }
visibilityTimeout消息处理失败时重试之间的时间间隔。有关更多详细信息,请参见此答案:Azure function visibilityTimeout
2条答案
按热度按时间mkshixfv1#
这是带服务总线的Azure Functions的正常行为。如果你需要在重试之间有延迟,则需要实现自定义逻辑,该逻辑可以延迟原始消息,并发送具有延迟的原始消息序列号的计划消息,以便在计划消息出现在队列中并由函数处理时检索该消息。或者,使用支持此功能的第三方库。
iyfamqjs2#
您的问题没有100%说明您是在Azure存储还是Azure服务总线中使用队列。如果您使用Azure存储队列:
你可以利用
visibilityTimeout
配置重试之间的时间。在内部,这将在指定的时间内将消息锁定给当前使用者。如果出错,将不会删除消息,超时后Azure队列将使消息再次可供任何可用的使用者使用。https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue?tabs=in-process%2Cextensionv5%2Cextensionv3&pivots=programming-language-csharp#host-json
visibilityTimeout消息处理失败时重试之间的时间间隔。
有关更多详细信息,请参见此答案:Azure function visibilityTimeout