优雅的重试机制

本文介绍了如何在Java开发中利用Guava Retrying库来创建灵活的重试策略,以应对调用外部服务时可能出现的异常。Guava Retrying提供多种重试策略,包括设置最大重试次数、等待时长等,使得重试操作既可控又高效。通过示例代码展示了如何配置和使用重试机制,并解释了相关接口的功能。
摘要由CSDN通过智能技术生成

在日常开发中,我们经常会遇到需要调用外部服务和接口的场景。外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重试策略重新调用 API 接口来获取。重试策略在服务治理方面也有很广泛的使用,通过定时检测,来查看服务是否存活(Active)。
Guava Retrying 是一个灵活方便的重试组件,包含了多种的重试策略,而且扩展起来非常容易。
用作者的话来说:

This is a small extension to Google’s Guava library to allow for the creation of configurable retrying strategies for an arbitrary function call, such as something that talks to a remote service with flaky uptime.

使用 Guava-retrying 你可以自定义来执行重试,同时也可以监控每次重试的结果和行为,最重要的基于 Guava 风格的重试方式真的很方便。
代码示例
以下会简单列出 guava-retrying 的使用方式:

  • 如果抛出 IOException 则重试,如果返回结果为 null 或者等于 2 则重试,固定等待时长为 300 ms,最多尝试 3 次;
Callable<Integer> task = new Callable<Integer>() {
   
 @Override
 public Integer call() throws Exception {
   
 return 2;
 }
};

Retryer<Integer> retryer = RetryerBuilder.<Integer>newBuilder()
 .retryIfResult(Predicates.<Integer>isNull())
 .retryIfResult(Predicates.equalTo(2))
 .retryIfExceptionOfType(IOException.class)
 .withStopStrategy(StopStrategies.stopAfterAttempt(3))
 .withWaitStrategy(WaitStrategies.fixedWait(300, TimeUnit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值