Ejemplo n.º 1
0
    public LoadBalancer build() {
      loadBalancer.suspensionTimes = new AtomicLongArray(loadBalancer.endpointCount);
      loadBalancer.successCounters = new AtomicLongArray(loadBalancer.endpointCount);
      loadBalancer.failureCounters = new AtomicLongArray(loadBalancer.endpointCount);

      loadBalancer.failureTimes = new AtomicLongArray[loadBalancer.endpointCount];
      for (int i = 0; i < loadBalancer.failureTimes.length; i++) {
        loadBalancer.failureTimes[i] = new AtomicLongArray(loadBalancer.failureRateMaxFailures);
      }

      // Setup monitor if it has been set
      if (loadBalancer.monitorFunction != null) {
        loadBalancer.monitorUnhealthyCounters = new AtomicIntegerArray(loadBalancer.endpointCount);
        loadBalancer.monitorHealthyCounters = new AtomicIntegerArray(loadBalancer.endpointCount);
        loadBalancer.scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        loadBalancer.scheduledExecutorService.scheduleWithFixedDelay(
            () -> {
              loadBalancer.checkMonitors();
            },
            0,
            loadBalancer.monitorCheckInterval,
            loadBalancer.monitorCheckTimeUnit);
      }
      return loadBalancer;
    }