Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

java retry module, based on guava-retrying, support sync/async retry

License

Notifications You must be signed in to change notification settings

jingyi-world/java-retrying

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

22 Commits

Repository files navigation

java-retrying

License FOSSA Status Build Status codecov

java重试, 支持同步/异步, 简单灵活可配, 不依赖第三方库.

基于guava-retrying改造, 增加了异步重试, 同时去掉了第三方依赖, 使用方法基本一致.

名称 JDK 第三方依赖 同步重试 异步重试
guava-retrying 大于等于6 guava,findbugs Y N
java-retrying 大于等于8 Y Y

Quickstart

  • 依赖
<dependency>
 <groupId>com.github.lowzj</groupId>
 <artifactId>java-retrying</artifactId>
 <version>1.2</version>
</dependency>
  • 同步重试
Retryer<Integer> retryer = RetryerBuilder.<Integer>newBuilder()
 .withWaitStrategy(WaitStrategies.fixedWait(100L, TimeUnit.MILLISECONDS))
 .retryIfResult(num -> num != 5)
 .retryIfExceptionOfType(RuntimeException.class)
 .withStopStrategy(StopStrategies.stopAfterAttempt(7))
 .build();
try {
 retryer.call(noRuntimeExceptionAfter(4));
} catch (ExecutionException | RetryException e) {
 e.printStackTrace();
}
  • 异步重试
AsyncRetryer<Integer> asyncRetryer = RetryerBuilder.<Integer>newBuilder()
 .withWaitStrategy(WaitStrategies.fixedWait(100L, TimeUnit.MILLISECONDS))
 .retryIfResult(num -> num != 4)
 .retryIfExceptionOfType(RuntimeException.class)
 .withStopStrategy(StopStrategies.stopAfterAttempt(7))
 .withExecutor(ExecutorsUtil.scheduledExecutorService("example", 1))
 .buildAsyncRetryer();
CompletableFuture<Integer> future = asyncRetryer.call(noRuntimeExceptionAfter(3));
// get the result asynchronously
future.whenComplete((result, error) -> System.out.println(result));
// or get the result synchronously
try {
 System.out.println(future.get());
} catch (InterruptedException | ExecutionException e) {
 e.printStackTrace();
}

其中函数noRuntimeExceptionAfter如下:

private Callable<Integer> noRuntimeExceptionAfter(final int attemptNumber) {
 return new Callable<Integer>() {
 private int count = 0;
 @Override
 public Integer call() throws Exception {
 if (count++ < attemptNumber) {
 throw new RuntimeException("count[" + (count - 1) + "] < attemptNumber[" + attemptNumber + "]");
 }
 return count;
 }
 };
}

LICENSE

Java-retrying is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

About

java retry module, based on guava-retrying, support sync/async retry

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%

AltStyle によって変換されたページ (->オリジナル) /