
# 使用重试功能
clientcontrol提供了重试功能，当目标业务方法执行报错时，会按照用户配置的策略重试目标业务方法，具体使用方式如下：
1. [pom文件添加依赖](https://support.huaweicloud.com/devg-astropro/astropro_06_0079.html#astropro_06_0079__li1026515252452)。
2. 配置文件，参考下面配置样例。 
   ```
   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
   ```
   
   
3. 在目标方法上添加@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。
 
