Guava-Retrying GitHub地址:https://github.com/rholder/guava-返回
Guava-Retrying是Google的Guava库的一小部分扩展程序,可以为任何功能创建可配置的试用策略,例如功能调用远程服务对话,并具有不稳定的运行时间。
在日常开发中,尤其是在微观服务的时代,当我们称之为外部接口时,我们经常因第三阶段界面超时和电流等问题而失败。我应该尝试吗?如果您想设置超过很长时间,如果您不成功,该怎么办?幸运的是,番石榴的重新制定为我们提供了功能强大且易于使用的试验框架Guava重新制定。
我们可以通过重试构建重试器,并且您可以在需要重试(即重试时间安排),停止重试策略,等待时间间隔策略,任务执行时间限制策略时进行设置
首先看一个简单的例子:
输出:
重试的重试方法将其用于在哪些情况下重试。通常,它可以分为两种类型:根据执行异常重试和根据该方法的执行结果。
我们可以决定何时做出更自定义的方法来决定何时retryifexceptionoftype(班级 extends Throwable> 异常)重复重复retryifresult(@nonnnull Predicatertpredicate),当该方法执行异常频道时。
停止重试策略用于确定何时不重试。接口com.github.rholder.retry.try.topstrategy。停止重试策略的实施类是在com.github.rholder.retry.stopstrategies中。这是一个策略。
该策略永远不会永远停止,永远不要停止,检查其实施类,并直接返回false
达到执行时间的数量后,停止重试,并检查其实现类:
当距离方法的第一个执行超过指定的延迟时间时,就停止了,即经过审查。执行下一个重试后,此处指定的延迟时间,请检查其实现:
这两种策略被放在一起,它们的作用是控制试用任务之间的间隔时间,以及如何阻止任务如何等待时间间隔。执行下一个任务。BlockStrategy用于确定任务如何等待。他们的两个战略工厂是com.github.rholder.retry.waitstrategies和Blockstrategies。
5.1.1螺纹肌层构造这是Blockstrategies,它决定了如何阻止任务。它主要被Thread.Sleep()阻止以查看其实现:
5.2.1增量WAITSTRATEGY此策略在确定任务间隔时间时返回增加间隔时间,即每个任务之间的时间间隔逐渐增加,并且更长。查看其实施:
该策略进入启动时间间隔值和增量步长,然后每个等待时间的长度增加增量持续时间。
5.2.2顾名思义,随机Waitstrategy返回随机时间。我们需要传递的是最小间隔和最大间隔,然后随机返回两者之间的间隔。
5.2.3 filexwaitstrategy这个策略是返回固定的时间间隔。查看其实现:
5.2.4异常WaitStrategy此策略是确定该方法是否是在任务之间的间隔和多长时间执行的。
5.2.5 CompositeWaitStrategy这没什么好说的。顾名思义,这是策略的结合。您可以传递多个候补,然后所有候补的间隔时间是最终的间隔时间。查看其实现:
5.2.6斐波那契华特造影这种策略与增量WaitStrategy有点相似。间隔时间随着重新测试数量的增加而增加。不同之处在于,斐波那契Waitstrategy是根据斐波那契数计算的。使用此策略时,我们需要传递。输入乘法因子和最大间隔,并且您不会发布它。
5.2.7指数Waitstrategy这类似于增量WaitStrategy和fibonacciwaitstrategy。间隔时间随着重新测试数量的增加而增加,但策略的增加正在增加。查看其实施:
重试时,将调用重新流放词的攻击方法。目前,我们可以执行其他操作,例如记录日志。
输出:
实际上,在此步骤之后,实施原则可能很明显,也就是说,上述各种策略合作以实现非常灵活的重试机制。在此之前,我们要看一个我在上面没有说的一个无声的人
通过接口方法,您可以知道尝试类包含执行任务的数量,任务执行异常,任务执行结果以及第一个执行任务的时间间隔。
接下来,查看关键执行入口重试#调用:
可以看出,核心实施并不难看,但是该框架通过结合建造器模式和战略模型提供了非常清晰,灵活的审核机制。它的设计思想值得从学习中学习!