基于此question ,如果受到限制,写入 Azure Function 中的 Azure DocDB 输出绑定(bind)似乎将重试 10 次(HTTP 429)。不过我自己还没有验证过。
我想增加重试次数的限制。我的数据在很短的时间内以大块的形式出现,然后有很长一段时间的停机时间,这意味着获取 429 并等待一段时间对于我的目的来说是可以的。但我必须保证不会丢失任何数据。
解决这个问题的一种方法是增加文档数据库中的 RTU 限制,以确保在大块数据进入时我不会得到 429,但它已经是我在处理数据时所需的大约 2.5 倍了。停机期。是否有办法让重试无限运行直到成功,或者不太理想的是,将重试次数增加到 10 次以上?
最佳答案
为什么不改变方法,而不是立即插入文档,您可以利用服务总线并实现死信队列,以下是一些链接:
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues
- https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus
- https://blog.jeroenmaes.eu/2017/01/process-service-bus-dead-letter-message-with-azure-functions/
这个想法是这样的:
- 当前函数不会将数据保存在 DocumentDB 中,而是将其发送到服务总线(您只需更改输出绑定(bind))
- 另一个函数将处理服务总线的每条消息,如果失败(您可以在函数中管理超时,然后将消息移至死信队列)
- 另一个函数将处理死信队列中的任何消息
您只需要对第一个函数进行一个小更改,然后再创建两个函数,这可能听起来太复杂,但数据会具有很强的一致性。在上述所有链接中都有一个我在这里提到的示例。
关于azure - 如何在Azure Function中设置Azure DocumentDB输出绑定(bind)的重试次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858412/