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
22 this.circuitBreaker = new DefaultCircuitBreaker<>();
23 this.breakHandler = new ReturnStaticValueHandler<>(-1l);
24 this.breakStrategy = new LimitedConcurrentExecutionsStrategy<>(3l);
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 }