public synchronized void completedExchange(Exchange exchange, long time) {
    increment();
    exchangesCompleted.increment();
    exchangesInflight.decrement();

    if (ExchangeHelper.isFailureHandled(exchange)) {
      failuresHandled.increment();
    }
    Boolean externalRedelivered = exchange.isExternalRedelivered();
    if (externalRedelivered != null && externalRedelivered) {
      externalRedeliveries.increment();
    }

    minProcessingTime.updateValue(time);
    maxProcessingTime.updateValue(time);
    totalProcessingTime.updateValue(time);
    lastProcessingTime.updateValue(time);
    deltaProcessingTime.updateValue(time);

    long now = new Date().getTime();
    if (firstExchangeCompletedTimestamp.getUpdateCount() == 0) {
      firstExchangeCompletedTimestamp.updateValue(now);
    }

    lastExchangeCompletedTimestamp.updateValue(now);
    if (firstExchangeCompletedExchangeId == null) {
      firstExchangeCompletedExchangeId = exchange.getExchangeId();
    }
    lastExchangeCompletedExchangeId = exchange.getExchangeId();

    // update mean
    long count = exchangesCompleted.getValue();
    long mean = count > 0 ? totalProcessingTime.getValue() / count : 0;
    meanProcessingTime.updateValue(mean);
  }
  public synchronized void failedExchange(Exchange exchange) {
    increment();
    exchangesFailed.increment();
    exchangesInflight.decrement();

    if (ExchangeHelper.isRedelivered(exchange)) {
      redeliveries.increment();
    }
    Boolean externalRedelivered = exchange.isExternalRedelivered();
    if (externalRedelivered != null && externalRedelivered) {
      externalRedeliveries.increment();
    }

    long now = new Date().getTime();
    if (firstExchangeFailureTimestamp.getUpdateCount() == 0) {
      firstExchangeFailureTimestamp.updateValue(now);
    }

    lastExchangeFailureTimestamp.updateValue(now);
    if (firstExchangeFailureExchangeId == null) {
      firstExchangeFailureExchangeId = exchange.getExchangeId();
    }
    lastExchangeFailureExchangeId = exchange.getExchangeId();
  }