View Javadoc
1   package examples.experimental.example3;
2   
3   import java.io.IOException;
4   
5   import java.util.ArrayList;
6   import java.util.HashSet;
7   import java.util.List;
8   import java.util.concurrent.ExecutionException;
9   import java.util.concurrent.ExecutorService;
10  import java.util.concurrent.Executors;
11  import java.util.concurrent.Future;
12  import java.util.concurrent.TimeUnit;
13  import java.util.concurrent.atomic.AtomicInteger;
14  
15  import examples.experimental.example3.classes.MyCallerWithMethodInvokingTask;
16  
17  import net.secodo.jcircuitbreaker.breakhandler.BreakHandler;
18  import net.secodo.jcircuitbreaker.breakstrategy.BreakStrategy;
19  import net.secodo.jcircuitbreaker.breakstrategy.impl.LimitedCurrentAverageExecutionTimeStrategy;
20  
21  
22  public class SimulationWithMethodInvokingTask {
23    public static void main(String[] args) throws ExecutionException, InterruptedException {
24      HashSet<Integer> failedPings = new HashSet<>();
25  
26      BreakHandler<Void> failedPingsStoringHandler = (circuitBreaker, task, breakStrategy, executionContext) -> {
27        failedPings.add(task.hashCode());
28        return null;
29      };
30  
31      BreakStrategy<Void> breakStrategy = new LimitedCurrentAverageExecutionTimeStrategy<Void>(700);
32  
33  
34      MyCallerWithMethodInvokingTask myCaller = new MyCallerWithMethodInvokingTask(failedPingsStoringHandler,
35        breakStrategy);
36  
37      // simulate access by 10 threads
38  
39      ExecutorService executorService = Executors.newWorkStealingPool(10);
40  
41      List<Future> responses = new ArrayList<>();
42  
43      long start = System.currentTimeMillis();
44  
45      // simulate multiple execution of the method by different threads at the same time
46      for (int i = 0; i < 100; i++) {
47        AtomicInteger pingId = new AtomicInteger(i);
48  
49        Future<?> response = executorService.submit(() -> {
50          try {
51            myCaller.ping(pingId.get());
52          } catch (Exception e) {
53            System.out.println("Exception while pinging #" + pingId.get());
54          }
55  
56        });
57        responses.add(response);
58      }
59  
60  
61      executorService.shutdown();
62      executorService.awaitTermination(2, TimeUnit.MINUTES);
63  
64      long stop = System.currentTimeMillis();
65      System.out.println("Failed pings: " + failedPings.size());
66      System.out.printf("Finished in %d seconds", (int) (stop - start) / 1000);
67  
68    }
69  
70  }