更好的 java 重试框架 sisyphus 配置的 2 种方式介绍,nginx性能优化面试题

  • 重试注解

    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


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

如果是项目中没有使用 spring,直接使用这种方式比较方便。

Spring-AOP


可以和 spring 直接整合。

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

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

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

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

Kafka的消费者*

  • 深入理解Kafka
  • 可靠的数据传递

[外链图片转存中…(img-7zZRCG0X-1711112483548)]

[外链图片转存中…(img-mHu2j0M4-1711112483549)]

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-DTBRceTp-1711112483549)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-1s1JhQnF-1711112483550)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值