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

本文介绍了Sisyphus框架中的重试机制,包括Retry和RetryWait注解的使用,以及如何基于接口实现用户自定义功能。文章详细解释了注解的灵活性和设计规范,以及如何通过Maven引入框架。此外,还提及了学习资源对于Java开发者的重要性。
摘要由CSDN通过智能技术生成

默认不做恢复。

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;

}

复制代码

注解的使用

=====

定义好了注解,肯定要有注解的相关使用。

关于注解的使用,主要有两种方式。

Proxy+CGLIB


基于代理模式和字节码增强。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

资料整理不易,读者朋友可以转发分享下!

Java核心知识体系笔记.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

中高级Java开发面试高频考点题笔记300道.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

架构进阶面试专题及架构学习笔记脑图

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
keeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!**

资料整理不易,读者朋友可以转发分享下!

Java核心知识体系笔记.pdf

[外链图片转存中…(img-vfEVbL27-1713730149167)]

中高级Java开发面试高频考点题笔记300道.pdf

[外链图片转存中…(img-TjSxMTeB-1713730149167)]

架构进阶面试专题及架构学习笔记脑图

[外链图片转存中…(img-NVcLqhU2-1713730149168)]

Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值