覆盖默认重试弹性策略

了解如何为特定 API 覆盖默认重试弹性策略

Dapr 为任何不成功的请求(如故障和临时错误)提供默认重试。在弹性规范中,您可以通过使用保留的命名关键字定义策略来覆盖 Dapr 的默认重试逻辑。例如,定义一个名为 DaprBuiltInServiceRetries 的策略可以覆盖通过服务间请求在边车之间发生故障时的默认重试。策略覆盖不会应用于特定目标。

注意:虽然您可以使用更稳健的重试来覆盖默认值,但不能使用低于提供的默认值的值进行覆盖,也不能完全移除默认重试。这可以防止意外的停机。

下表描述了 Dapr 的默认重试以及用于覆盖它们的策略关键字:

功能覆盖关键字默认重试行为描述
服务调用DaprBuiltInServiceRetries每次调用重试的退避间隔为 1 秒,最多重试 3 次。边车对边车的请求(服务调用方法调用)失败并导致 gRPC 代码 UnavailableUnauthenticated
ActorsDaprBuiltInActorRetries每次调用重试的退避间隔为 1 秒,最多重试 3 次。边车对边车的请求(Actor 方法调用)失败并导致 gRPC 代码 UnavailableUnauthenticated
Actor 提醒DaprBuiltInActorReminderRetries每次调用重试采用指数退避,初始间隔为 500ms,最大间隔为 60s,持续时间为 15 分钟向状态存储持久化 Actor 提醒失败的请求
初始化重试DaprBuiltInInitializationRetries每次调用执行 3 次重试,采用指数退避,初始间隔为 500ms,持续时间为 10 秒向应用程序发出请求以检索给定规范时的故障。例如,检索订阅、组件或弹性规范失败

下面的弹性规范示例展示了如何使用保留的命名关键字 ‘DaprBuiltInServiceRetries’ 来覆盖_所有_服务调用请求的默认重试。

同时还定义了一个名为 ‘retryForever’ 的重试策略,该策略仅应用于 appB 目标。appB 使用 ‘retryForever’ 重试策略,而所有其他应用程序服务调用重试故障则使用被覆盖的 ‘DaprBuiltInServiceRetries’ 默认策略。

spec:
  policies:
    retries:
      DaprBuiltInServiceRetries: # 覆盖服务间调用的默认重试行为
        policy: constant
        duration: 5s
        maxRetries: 10

      retryForever: # 用户定义的重试策略会替换默认重试。目标仅依赖于应用的策略。 
        policy: exponential
        maxInterval: 15s
        maxRetries: -1 # 无限期重试

  targets:
    apps:
      appB: # 目标服务的 app-id
        retry: retryForever

相关链接

尝试其中一个弹性快速入门: