guava-retrying,重试工具使用

- 日理万妓 2022-06-07 12:39 322阅读 0赞

最常用的就是在方法抛出异常的时候重试,比如网络故障导致的IOException。java异常系统分为:runtime异常,checked异常和error,其中ERROR程序处理不了,不需要管;不过作为学习,我们可以测试下error的情况。下面这段代码我们定义了3个任务:分别抛出runtime异常、checked异常、error。

先上一段实例代码:

  1. /**
  2. * guava retry
  3. * 结果返回false 重试:固定等待时长为 300 ms,最多尝试 3 次
  4. */
  5. static Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
  6. .retryIfExceptionOfType(RestClientException.class)
  7. .retryIfResult(aBoolean -> Objects.equals(aBoolean, false))
  8. .withWaitStrategy(WaitStrategies.fixedWait(300, TimeUnit.MILLISECONDS))
  9. .withStopStrategy(StopStrategies.stopAfterAttempt(3))
  10. .build();

调用:

  1. for (final String mobile : Mobiles) {
  2. final SmsLog smsLog = new SmsLog(mobile, content);
  3. Callable<Boolean> sendTask = () -> send(mobile, content);
  4. try {
  5. retryer.call(sendTask);
  6. } catch (ExecutionException | RetryException e) {
  7. logger.error("重试三次,发送短信失败");
  8. }
  9. }
  10. private Boolean send(String mobile, String content) {
  11. boolean success = true;
  12. .....
  13. return success;
  14. }

在这里加入使用详细介绍:http://blog.csdn.net/aitangyong/article/details/53886293

发表评论

表情:
评论列表 (有 0 条评论,322人围观)

还没有评论,来说两句吧...

相关阅读

    相关 】Java 中的 7 种机制

    随着互联网的发展项目中的业务功能越来越复杂,有一些基础服务我们不可避免的会去调用一些第三方的接口或者公司内其他项目中提供的服务,但是远程服务的健壮性和网络稳定性都是不可控因素。

    相关 java 机制 工具

    使用场景:业务中经常遇到需要重试机制对一段代码进行 多次执行常遇到的有 访问网络数据接口,由于网络等原因需要重试 两到多次,直到返回正确结果为止。 已有方案:     1.