Java重试机制简单使用(基于guava-retrying实现)
2021/5/18 14:28:07
本文主要是介绍Java重试机制简单使用(基于guava-retrying实现),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、简单介绍
- Guava 是Java的工具集,提供了一些常用的便利的操作工具类,减少因为 空指针、异步操作等引起的问题BUG,提高开发效率。Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。
- 在日常开发中,接口调用过程中出现异常是经常会遇到的,任何接口都会有不同概率的异常情况,对于可重入的接口,为了避免偶发性异常造成的服务不可用,重试机制就非常有必要了.guava-retrying 是一个非常灵活的重试组件,包含多种重试策略,扩展很方便。
二、相关依赖
<dependency> <groupId>com.github.rholder</groupId> <artifactId>guava-retrying</artifactId> <version>2.0.0</version> </dependency>
三、演示demo
高阶的使用方式可以重点参考官方文档,基本的使用废话不多说,直接上代码:
package com.ideax.retry.guava; import com.github.rholder.retry.*; import com.google.common.base.Preconditions; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Objects; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; /** * 基于Guava的重试机制 * * @author zhangxs **/ public class GuavaRetryDemo { public static void retrySendMessage(String phone, String message) { // 定义重试规则(如果需要其他更详细的规则,建议看源码) Retryer<Boolean> retry = RetryerBuilder.<Boolean>newBuilder() .retryIfException() // 运行时异常时 .retryIfRuntimeException() // call方法返回true时重试 .retryIfResult(ab -> Objects.equals(ab, true)) // 10秒后重试 .withWaitStrategy(WaitStrategies.fixedWait(10, TimeUnit.SECONDS)) // 重试n次,超过次数就... .withStopStrategy(StopStrategies.stopAfterAttempt(5)) // 可以自定义监听器 // .withRetryListener() .build(); // 调用重试任务 try { retry.call(() -> { try { send(phone,message); return false; } catch (Exception e) { System.out.println("[" + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") .format(LocalDateTime.now()) + "]尝试重新发送:" + e.getMessage()); return true; } }); } catch (ExecutionException | RetryException e) { e.printStackTrace(); } } public static void send(String phone, String message) { // 参数校验 Preconditions.checkNotNull(phone,"phone不能为空!"); Preconditions.checkNotNull(message,"message不能为空!"); // 您老的业务代码,千言万语都在这里了,比如通过第三方平台发送短信,随便随机抛个异常 if (LocalDateTime.now().getSecond() % 3 == 0) { throw new RuntimeException("不好意思,短信平台已挂"); } System.out.println("[" + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") .format(LocalDateTime.now()) + "]短信发送成功:" + phone + "->" + message); } public static void main(String[] args) { retrySendMessage("18605998878","guava"); } }
四、参考
- guava-retrying源码及文档
- guava源码及文档
- guava热心文档一
- guava热心文档二
这篇关于Java重试机制简单使用(基于guava-retrying实现)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)