-
重试注解
-
- 实际需要,只允许放在方法上。
-
- 如果放在接口上,是否所有的子类都生效?为了简单明确,不提供这种实现。
-
- 保持注解和接口的一致性。{@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;
/**
-
最大尝试次数
-
- 包含方法第一次正常执行的次数
-
@return 次数
*/
int maxAttempt() default 3;
/**
-
重试触发的场景
-
@return 重试触发的场景
*/
Class<? extends RetryCondition> condition() default ExceptionCauseRetryCondition.class;
/**
-
监听器
-
- 默认不进行监听
-
@return 监听器
*/
Class<? extends RetryListen> listen() default NoRetryListen.class;
/**
-
恢复操作
-
- 默认不进行任何恢复操作
-
@return 恢复操作对应的类
*/
Class<? extends Recover> recover() default NoRecover.class;
/**
-
等待策略
-
- 支持指定多个,如果不指定,则不进行任何等待,
-
@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.*;
/**
-
重试等待策略
-
- 为了对应重试策略,所有的内置注解应该实现当前的注解。
-
- 是否允许自定义注解?
-
当注解+对象同时出现的时候,视为组合。
-
@author binbin.hou
-
@since 0.0.3
*/
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target(ElementType.ANNOTATION_TYPE)
@RetryWaitAble(DefaultRetryWaitAbleHandler.class)
public @interface RetryWait {
/**
-
默认值
-
- fixed 模式,则对应固定等待时间
-
- 递增
-
@return 默认值
*/
long value() default RetryWaitConst.VALUE_MILLS;
/**
-
最小值
-
@return 最小值
*/
long min() default RetryWaitConst.MIN_MILLS;
/**
-
最大值
-
@return 最大值
*/
long max() default RetryWaitConst.MAX_MILLS;
/**
-
影响因数
-
- 递增重试,默认为 {@link RetryWaitConst#INCREASE_MILLS_FACTOR}
-
- 指数模式。默认为 {@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
基于代理模式和字节码增强。
如果是项目中没有使用 spring,直接使用这种方式比较方便。
Spring-AOP
可以和 spring 直接整合。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
Kafka实战笔记
关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图
- Kafka入门
- 为什么选择Kafka
- Karka的安装、管理和配置
- Kafka的集群
- 第一个Kafka程序
afka的生产者
- Kafka的消费者
- 深入理解Kafka
- 可靠的数据传递
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
- Kafka实战之削峰填谷
Kafka的消费者*
- 深入理解Kafka
- 可靠的数据传递
[外链图片转存中…(img-7zZRCG0X-1711112483548)]
[外链图片转存中…(img-mHu2j0M4-1711112483549)]
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
[外链图片转存中…(img-DTBRceTp-1711112483549)]
- Kafka实战之削峰填谷
[外链图片转存中…(img-1s1JhQnF-1711112483550)]