View Javadoc
1   package examples.example1.classes;
2   
3   import net.secodo.jcircuitbreaker.breaker.CircuitBreaker;
4   import net.secodo.jcircuitbreaker.breaker.impl.DefaultCircuitBreaker;
5   import net.secodo.jcircuitbreaker.breakhandler.BreakHandler;
6   import net.secodo.jcircuitbreaker.breakhandler.impl.ReturnStaticValueHandler;
7   import net.secodo.jcircuitbreaker.breakstrategy.BreakStrategy;
8   import net.secodo.jcircuitbreaker.breakstrategy.impl.LimitedConcurrentExecutionsStrategy;
9   import net.secodo.jcircuitbreaker.exception.TaskExecutionException;
10  
11  public class MyCallerWithCircuitBreaker {
12  
13    private final SomeServiceClass myService;
14    private final CircuitBreaker<Long> circuitBreaker;
15    private final BreakHandler<Long> breakHandler;
16    private final BreakStrategy<Long> breakStrategy;
17  
18    public MyCallerWithCircuitBreaker() {
19      this.myService = new SomeServiceClass();
20  
21      // prepare the circuit breaker
22      this.circuitBreaker = new DefaultCircuitBreaker<>();
23      this.breakHandler = new ReturnStaticValueHandler<>(-1l);
24      this.breakStrategy = new LimitedConcurrentExecutionsStrategy<>(3l); // allow only 3 executions in parallel
25  
26  
27    }
28  
29    public Long runService(int serviceParam)  {
30  
31      try {
32        return circuitBreaker.execute(() -> myService.somePossiblyLongRunningMethod(serviceParam), breakStrategy,
33          breakHandler);
34      } catch (TaskExecutionException e) {
35        System.out.println("Calling somePossiblyLongRunningMethod resulted in exception: " + e.getTaskException());
36        throw new RuntimeException(e.getTaskException().getMessage(), e.getTaskException());
37      }
38    }
39  
40  }