更好的 java 重试框架 sisyphus 配置的 2 种方式介绍

重试等待的策略,可以指定多个。

默认为不做任何等待。

maxAttempt


指定最大重试次数,包括第一次执行。

默认值:3 次。

listen


指定重试的监听实现,默认为不做监听。

recover


当重试完成之后,依然满足重试条件,则可以指定恢复的策略。

默认不做恢复。

callable


待重试执行的方法。

retryCall


触发重试执行。

接口的详细介绍

=======

接口及其实现


所有的接口,都可以直接查看对应的子类实例。

用户自定义


基于替换的灵活性,用户可以实现接口,定义更符合自己业务的实现。

sisyphus 注解

===========

配置具有很高的灵活性,但是对于开发人员的使用,就没有注解那样简单灵活。

所以本框架也实现了基于注解的重试。

设计的规范


保证接口和注解二者的统一性。

maven 引入


${project.groupId}

sisyphus-annotation

${project.version}

复制代码

注解

==

核心注解主要有两个。

Retry


用于指定重试的相关配置。

/**

  • 重试注解

    1. 实际需要,只允许放在方法上。
    1. 如果放在接口上,是否所有的子类都生效?为了简单明确,不提供这种实现。
    1. 保持注解和接口的一致性。{@link com.github.houbb.sisyphus.api.core.Retry} 接口
  • @author binbin.hou

  • @since 0.0.3

*/

@Documented

@Inherited

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@RetryAble(DefaultRetryAbleHandler.class)

public @interface Retry {

/**

  • 重试类实现

  • @return 重试

  • @since 0.0.5

*/

Class<? extends com.github.houbb.sisyphus.api.core.Retry> retry() default DefaultRetry.class;

/**

  • 最大尝试次数

    1. 包含方法第一次正常执行的次数
  • @return 次数

*/

int maxAttempt() default 3;

/**

  • 重试触发的场景

  • @return 重试触发的场景

*/

Class<? extends RetryCondition> condition() default ExceptionCauseRetryCondition.class;

/**

  • 监听器

    1. 默认不进行监听
  • @return 监听器

*/

Class<? extends RetryListen> listen() default NoRetryListen.class;

/**

  • 恢复操作

    1. 默认不进行任何恢复操作
  • @return 恢复操作对应的类

*/

Class<? extends Recover> recover() default NoRecover.class;

/**

  • 等待策略

    1. 支持指定多个,如果不指定,则不进行任何等待,
  • @return 等待策略

*/

RetryWait[] waits() default {};

}

复制代码

RetryWait


用于指定重试的等待策略。

package com.github.houbb.sisyphus.annotation.annotation;

import com.github.houbb.sisyphus.annotation.annotation.metadata.RetryWaitAble;

import com.github.houbb.sisyphus.annotation.handler.impl.DefaultRetryWaitAbleHandler;

import com.github.houbb.sisyphus.core.constant.RetryWaitConst;

import com.github.houbb.sisyphus.core.support.wait.NoRetryWait;

import java.lang.annotation.*;

/**

  • 重试等待策略

    1. 为了对应重试策略,所有的内置注解应该实现当前的注解。
    1. 是否允许自定义注解?
  • 当注解+对象同时出现的时候,视为组合。

  • @author binbin.hou

  • @since 0.0.3

*/

@Retention(RetentionPolicy.RUNTIME)

@Inherited

@Documented

@Target(ElementType.ANNOTATION_TYPE)

@RetryWaitAble(DefaultRetryWaitAbleHandler.class)

public @interface RetryWait {

/**

  • 默认值

    1. fixed 模式,则对应固定等待时间
    1. 递增
  • @return 默认值

*/

long value() default RetryWaitConst.VALUE_MILLS;

/**

  • 最小值

  • @return 最小值

*/

long min() default RetryWaitConst.MIN_MILLS;

/**

  • 最大值

  • @return 最大值

*/

long max() default RetryWaitConst.MAX_MILLS;

/**

  • 影响因数

    1. 递增重试,默认为 {@link RetryWaitConst#INCREASE_MILLS_FACTOR}
    1. 指数模式。默认为 {@link RetryWaitConst#MULTIPLY_FACTOR}
  • @return 影响因数

*/

double factor() default Double.MIN_VALUE;

/**

  • 指定重试的等待时间 class 信息

  • @return 重试等待时间 class

*/

Class<? extends com.github.houbb.sisyphus.api.support.wait.RetryWait> retryWait() default NoRetryWait.class;

}

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值