Java 有重试 N 次不行就抛个异常的工具包么?

2022-12-30 17:10:59 +08:00
 weishao666

RT ,需求,重试 5 次,不行抛异常,自己的写法是:

while (!某一个条件 ready || retryTimes < 5) {
   Thread.sleep(1000);
   retryTimes++;
}

if (retryTimes == 5) {
   throw new xxxException();
}

不考虑通知机制的前提下,有啥好的写法,目前这个写法太搓了

1837 次点击
所在节点    问与答
11 条回复
ql562482472
2022-12-30 17:16:15 +08:00
写个框架 比如
class RetryExecutor{
public retry(Consumer task, int retryTimes,Function onsuccess,Function onfailure)
}
jdOY
2022-12-30 17:18:35 +08:00
spring retry
oneisall8955
2022-12-30 17:24:53 +08:00
<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
<version>2.0.0</version>
</dependency>
kaneg
2022-12-30 17:27:22 +08:00
resilience4j-retry
wolfie
2022-12-30 17:30:17 +08:00
Guava Retry
z960112559
2022-12-30 18:05:15 +08:00
spring-retry
vayci
2022-12-30 18:16:20 +08:00
借楼提个问:spring-retry 基于内存实现,程序重启后重试中没结束的逻辑就丢失了。为实现重新程序还能接着重试,我自己手动持久化到 redis ,然后启动时使用 RetryTemplate 又去创建重试。但是感觉这个做法有点蠢,有没有比较优雅的实现方式或者现成的中间件可以实现
monkeyzsf
2022-12-30 18:45:20 +08:00
RxJava:retryWhen ?
itning
2022-12-30 18:49:12 +08:00
watzds
2022-12-30 18:57:22 +08:00
@vayci #7 同步重试又不是异步重试,失败就抛异常呗,程序重启失败你没事务吗?那没重试也不安全啊

要异步就 MQ
vitoliu
2022-12-30 19:52:35 +08:00
Future.callback guava retry 都很优雅。还可以结合 eventbus 做 fallback listener

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/905635

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX