更新时间:2025-01-09 GMT+08:00
使用重试功能
clientcontrol提供了重试功能,当目标业务方法执行报错时,会按照用户配置的策略重试目标业务方法,具体使用方式如下:
- pom文件添加依赖。
- 配置文件,参考下面配置样例。
devspore: client-control: rules: retryTest: # 此处配置的是一个别名,用户可自定义,具体使用地方是在注解上 match: ^.*$ module: RetryFirst time-limit: # 超时功能默认开启,当只使用重试功能时,需要手动关闭超时功能 enable: false retry: enable: true max-attempts: 3 # 重试次数,算上第一次执行的时候 wait-duration-ms: 500 # 每次重试的间隔时间 policy: Randomized #此处配置的是重试间隔策略,可选值(Exponential/Randomized) randomized-wait-factor: 0.5 #随机策略随机因子(选择随机策略生效:基础间隔500,每次间隔为:500-500*0.5~500+500*0.5) exponential-backoff-multiplier: 2 #指数退避算法的乘数(选择指数策略生效:基础间隔500,每次间隔为:500,1000,2000.......) #不触发重试异常 ignore-exceptions: - com.huaweicloud.devspore.clientcontrol.exception.TestException fallback: # 熔断功能默认开启,当只使用重试功能时,需要手动关闭超时功能 enable: false
- 在目标方法上添加@ClientControl注解,且rule属性指定用户在配置文件中自定义的rules名称(本示例使用retryTest)。
// 在想要使用超时功能的方法上添加 @ClientControl注解, 属性值rule 填写配置文件中自定义的名称 @ClientControl(rule = "retryTest") public User testRetry(Integer id) { int i = 1 / id; return new User(id, "vn", 12); }
注意事项
- 当使用超时功能时,当前方法不能运行在异步线程中,异步会导致超时功能失效。
- 触发重试的机制是方法抛出异常,不管是什么异常,只要抛出了异常方法就会重试,如果抛出某些异常的时候不想重试,则可以参考配置中的ignore-exceptions,没有的时候此参数可以不配置。
- 配置中的policy中在提供的两种方式中选择一个即可,当使用Randomized的时候,配置randomized-wait-factor。 当使用Exponential的时候配置exponential-backoff-multiplier。
父主题: 使用场景