服务保障组件 重试实现01

核心接口Retry实现DefaultRetry

直接看doExecute方法

1.判断重试属性retryProperties是否是active

2.如果是active,开启cat的事务

3.执行onOpen,也就是循环所有的retryListeners,打开监听器

4.调用canRetry判断当前能否重试,调用properties的canRetry

   

5.先看下retryOnException,判断抛出的exception是否可以重试

  

   5.1 如果是第一次重试,以前没有抛出的异常,就直接返回true,代表这次可以重试

   5.2 如果不是第一次,就获取对应的class,然后去exceptionStateMap判断是否包含,包含就get获取boolean结果

   5.3  如果不包含,就继续判断该class,不能是ignore,必须是需要retry的(根据retryProperties判断)

   5.4   判断后的结果放入到exceptionStateMap

6.还需要判断重试是否超过最大次数

7.继续判断是否超过最大重试时间

8.上面重试判断成功后,就下发重试的event事件

9.调用retryCallback.doWithRetry();执行重试逻辑

   9.1 创建一个重试的命令RhinoInnerCommand

   9.2 判断重试方法,是否有线程池,如果没有,就直接采用信号量方式执行

  

   9.3 标记命令start,然后调用熔断器判断该请求能否允许执行

   9.4  如果能执行,就调用doRun()方法,本质还是调用rhinoMethod的invoke方法执行,执行后把结果放入到缓存中

   9.5  如果不能执行,就调用熔断之后的降级,本质为调用circuitBreaker.handleDegrade();

 

      

 

   

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值