- 最近在公司在进行rpc 调用的时候,对方的服务不太稳定. 需求就是要间隔多长时间,多少次来重试。达到最大值之后就不在重试。
- 看了好多的资料,发现了一个开源的guavaretryer, 比较简单对用户非常的友好。
- 我们先新建一个springboot的项目,要引入guava-retry 的包,它会自动引入guava的包。
我们将其打开,看一下Retryer这个类
这里面是它的一些参数,具体的意思看注释就行了。
我们主要看一下call 方法
这里也就是表明返回的是两种值,一个是你自己自定义callable 返回 的值,一个是Throwable 的值。
下面还有一个监听器。
在下面就是在尝试,可以尝试就返回结果。不能尝试就走下面的是否应该停止,要是可以停止的话,就抛出retry 异常,
不可以的话就阻塞,就是组织结束尝试,要是保错的话,会对当前进程进行中断。
4,下面我们写一个自定义的注解加上aop 来 实现这个功能,
先写一个自定义注解
在写一个aop
这里retryer使用的是构建者模式,第一个的意思是如果返回值是null, 我们上面的cell()满足。 如果报错了返回值是null , 下面是异常类型,在注解里面声明了。在下面是否是运行是的异常。 下面就是重试的时间间隔和单位, 下面就是多少次之后就停止重试。
5 我们在写一个接口测试一下
先测试一下正常情况
没问题, 在测试一下异常情况,把刚才的注释放开
看一下控制台和浏览器
就是我们注解默认的重试三次,间隔三秒。这种异常的堆栈信息我是打印出来,其实可以用全局异常拦截的,在入库。
好了。
喜欢就点赞啊。