Error handling 检测.NET ChangeFeed客户端库中的限制(HTTP 429)

Error handling 检测.NET ChangeFeed客户端库中的限制(HTTP 429),error-handling,azure-cosmosdb,azure-cosmosdb-changefeed,Error Handling,Azure Cosmosdb,Azure Cosmosdb Changefeed,在.NET应用程序中侦听更改提要更改时,在集合的高使用率峰值期间,对CosmosDB的请求可能会被限制(HTTP响应429) 针对.NET的CosmosDB change feed客户端有3种风格: 原件: 它与API兼容,但有大量代码更改 目前的实施是其中的一部分 这些版本中的哪一个(如果有的话)支持插入错误处理的方式(发出关于它的自定义遥测) 原始库在内部对HTTP 429执行重试,我无法找到一种方法连接到重试机制。这些库在延迟或速度方面没有SLA或保证。因为延迟或速度还受用于处理这些更改的

在.NET应用程序中侦听更改提要更改时,在集合的高使用率峰值期间,对CosmosDB的请求可能会被限制(HTTP响应429)

针对.NET的CosmosDB change feed客户端有3种风格:

  • 原件:

  • 它与API兼容,但有大量代码更改

  • 目前的实施是其中的一部分

  • 这些版本中的哪一个(如果有的话)支持插入错误处理的方式(发出关于它的自定义遥测)


    原始库在内部对HTTP 429执行重试,我无法找到一种方法连接到重试机制。

    这些库在延迟或速度方面没有SLA或保证。因为延迟或速度还受用于处理这些更改的代码和部署它的基础结构(以及位置和网络延迟等因素)的影响

    唯一的保证是“至少一次”交付更改,只要容器可用并且具有足够的吞吐量来服务请求

    这意味着变更提要处理器将始终不断重试,试图实现交付变更的保证。如果容器被限制,它将继续尝试,直到成功。无法保证您需要多长时间才能获得更改

    Cosmos DB服务返回429(节流阀)时,它还返回一个报头,指示何时需要重试请求,因此更改提要处理器将遵守此等待时间并重试


    如果请求具有遥测功能(在上可用),您可以在那里看到节流功能,甚至可以通过用户代理进行过滤,以确定接收它们的应用程序。

    这些库在延迟或速度方面没有SLA或保证。因为延迟或速度还受用于处理这些更改的代码和部署它的基础结构(以及位置和网络延迟等因素)的影响

    唯一的保证是“至少一次”交付更改,只要容器可用并且具有足够的吞吐量来服务请求

    这意味着变更提要处理器将始终不断重试,试图实现交付变更的保证。如果容器被限制,它将继续尝试,直到成功。无法保证您需要多长时间才能获得更改

    Cosmos DB服务返回429(节流阀)时,它还返回一个报头,指示何时需要重试请求,因此更改提要处理器将遵守此等待时间并重试


    如果请求具有遥测功能(在上可用),您可以在那里看到节流,甚至可以通过用户代理进行过滤,以确定哪个应用程序正在接收节流。

    为什么要挂接429次重试?只是为了遥测?您描述的所有版本都将重试并自动处理429,即使在您不断被限制的情况下,它们也将继续重试。是的,遥测(并在该情况下发出警报)。还有透明度。我知道统一Azure指标,它们不适合我们的用例。我们在延迟和节流方面有严格的SLO。我看了一下反编译代码和使用的内部
    BackoffRetryUtility。ExecuteAsync(…)
    方法确实采取了一个
    Action
    参数,该参数是在临时失败后调用的,这正是我需要的-但再一次,它没有暴露在任何地方。你为什么要尝试429次?只是为了遥测?您描述的所有版本都将重试并自动处理429,即使在您不断被限制的情况下,它们也将继续重试。是的,遥测(并在该情况下发出警报)。还有透明度。我知道统一Azure指标,它们不适合我们的用例。我们在延迟和节流方面有严格的SLO。我看了一下反编译代码和使用的内部
    BackoffRetryUtility。ExecuteAsync(…)
    方法确实采取了一个
    Action
    参数,该参数在临时失败后调用,这正是我所需要的-但同样,它没有在任何地方公开。