当您的系统遇到一些非致命性的错误(如偶现的超时等)时,可以通过重试的方式来避免系统最终失败。AHAS的自动重试规则可以在客户端的部分场景下为系统提供自动重试的能力,同时支持自定义重试策略。本文介绍如何配置自动重试规则。

前提条件

将应用接入AHAS应用防护,具体操作,请参见接入应用方式

背景信息

自动重试规则仅支持AHAS Sentinel Java SDK 1.8.0及以上版本,且仅支持通过注解方式埋点(@SentinelResource)或SentinelWrapper自定义埋点,以及Apache HttpClient/OkHttp适配接入的应用。通过Java Agent以及其他多语言SDK方式接入的应用暂不支持。关于接入Http Client的操作步骤,请参见接入Http Client

场景说明

以下场景建议您不要设置自动重试规则:

  • 建议您不要对致命错误(Fatal Error)重试,重试条件策略一般采取白名单机制(如只对超时异常、限流异常重试)。典型的报错像Error、ClassNotFoundException、IllegalArgumentException这些都建议您不要进行重试,业务错误建议您不要进行重试。
  • 重试需要注意幂等性,非幂等的操作在部分场景下重试(如超时,请求已到达对端)可能会不符合预期。
  • 前端应用,超时时间长且慢的接口,建议您不要进行重试。
  • 对于NIO、Netty、Reactive场景而言,建议您不要在EventLoop线程中重试,避免等待时阻塞事件传递,降低系统吞吐量。

新建自动重试规则

  1. 登录AHAS控制台,然后在页面左上角选择地域
  2. 在控制台左侧导航栏中选择流量防护 > 应用防护
  3. 应用防护页面单击目标应用卡片。
  4. 在左侧导航栏选择规则设置,然后选择方案页签,单击自动重试规则页签。
  5. 单击规则设置页面的新增自动重试规则
  6. 新增自动重试规则对话框,完成以下配置,然后单击新建
    参数 描述
    资源名称 适用该规则的资源名称,需要与监控页面上的资源名(埋点传入的资源名)保持一致。
    重试策略 重试时间间隔策略,目前支持固定间隔重试指数间隔重试两种策略:
    • 固定间隔重试:每次重试之间的时间间隔固定(时间间隔按照下方设置的基准重试间隔)。
    • 指数间隔重试:以设置的基准重试间隔为基准,每次以一个固定乘积因子指数增长(base * (factor^n)),默认乘积因子为1.5(如基准1000 ms,则每次重试间隔按1500、2250、3375这样的趋势递增)。
    基准重试间隔 重试的基准重试时长,每次重试等待的时间会基于基准时长和重试策略来计算,取值范围1 ms~10000 ms,建议不超过5000 ms。
    最大重试次数 最大允许的重试次数,建议在3次以内,取值范围1~10。
    重试条件策略 设置符合重试的异常条件。
    • 异常白名单模式:只有在白名单列表内的异常触发时才会重试。
    • 异常黑名单模式:在黑名单列表里的异常触发时不会进行重试,其余异常都会进行重试。
    白名单异常 异常条件集合,每个异常需要填写异常类的全限定名(如java.lang.IllegalArgumentException),目前匹配条件为精确匹配。
    黑名单异常
    新增成功的自动重试规则将会出现在自动重试规则页签中。