/*
 * Copyright (c) 2011-2016 The original author or authors
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Apache License v2.0 which accompanies this distribution.
 *
 *      The Eclipse Public License is available at
 *      http://www.eclipse.org/legal/epl-v10.html
 *
 *      The Apache License v2.0 is available at
 *      http://www.opensource.org/licenses/apache2.0.php
 *
 * You may elect to redistribute this code under either of these licenses.
 */

package io.vertx.circuitbreaker;

import io.vertx.codegen.annotations.DataObject;
import io.vertx.core.json.JsonObject;

Circuit breaker configuration options. All time are given in milliseconds.
Author:Clement Escoffier
/** * Circuit breaker configuration options. All time are given in milliseconds. * * @author <a href="http://escoffier.me">Clement Escoffier</a> */
@DataObject(generateConverter = true) public class CircuitBreakerOptions {
Default timeout in milliseconds.
/** * Default timeout in milliseconds. */
public static final long DEFAULT_TIMEOUT = 10000L;
Default number of failures.
/** * Default number of failures. */
public static final int DEFAULT_MAX_FAILURES = 5;
Default value of the fallback on failure property.
/** * Default value of the fallback on failure property. */
public static final boolean DEFAULT_FALLBACK_ON_FAILURE = false;
Default time before it attempts to re-close the circuit (half-open state) in milliseconds.
/** * Default time before it attempts to re-close the circuit (half-open state) in milliseconds. */
public static final long DEFAULT_RESET_TIMEOUT = 30000;
Default address on which the circuit breakers are sending their update.
/** * Default address on which the circuit breakers are sending their update. */
public static final String DEFAULT_NOTIFICATION_ADDRESS = "vertx.circuit-breaker";
Default notification period in milliseconds.
/** * Default notification period in milliseconds. */
public static final long DEFAULT_NOTIFICATION_PERIOD = 2000;
Default rolling window for metrics in milliseconds.
/** * Default rolling window for metrics in milliseconds. */
public static final long DEFAULT_METRICS_ROLLING_WINDOW = 10000;
Default number of buckets used for the rolling window.
/** * Default number of buckets used for the rolling window. */
public static final int DEFAULT_METRICS_ROLLING_BUCKETS = 10;
Default number of retries.
/** * Default number of retries. */
private static final int DEFAULT_MAX_RETRIES = 0;
The default rolling window span in milliseconds.
/** * The default rolling window span in milliseconds. */
private static final int DEFAULT_FAILURES_ROLLING_WINDOW = 10000;
The operation timeout.
/** * The operation timeout. */
private long timeout = DEFAULT_TIMEOUT;
The max failures.
/** * The max failures. */
private int maxFailures = DEFAULT_MAX_FAILURES;
Whether or not the fallback should be called upon failures.
/** * Whether or not the fallback should be called upon failures. */
private boolean fallbackOnFailure = DEFAULT_FALLBACK_ON_FAILURE;
The reset timeout.
/** * The reset timeout. */
private long resetTimeout = DEFAULT_RESET_TIMEOUT;
The event bus address on which the circuit breaker state is published.
/** * The event bus address on which the circuit breaker state is published. */
private String notificationAddress = DEFAULT_NOTIFICATION_ADDRESS;
The state publication period in ms.
/** * The state publication period in ms. */
private long notificationPeriod = DEFAULT_NOTIFICATION_PERIOD;
The number of retries
/** * The number of retries */
private int maxRetries = DEFAULT_MAX_RETRIES;
The metric rolling window in ms.
/** * The metric rolling window in ms. */
private long metricsRollingWindow = DEFAULT_METRICS_ROLLING_WINDOW;
The number of buckets used for the metric rolling window.
/** * The number of buckets used for the metric rolling window. */
private int metricsRollingBuckets = DEFAULT_METRICS_ROLLING_BUCKETS;
The failure rolling window in ms.
/** * The failure rolling window in ms. */
private long failuresRollingWindow = DEFAULT_FAILURES_ROLLING_WINDOW;
Creates a new instance of CircuitBreakerOptions using the default values.
/** * Creates a new instance of {@link CircuitBreakerOptions} using the default values. */
public CircuitBreakerOptions() { // Empty constructor }
Creates a new instance of CircuitBreakerOptions by copying the other instance.
Params:
  • other – the instance fo copy
/** * Creates a new instance of {@link CircuitBreakerOptions} by copying the other instance. * * @param other the instance fo copy */
public CircuitBreakerOptions(CircuitBreakerOptions other) { this.timeout = other.timeout; this.maxFailures = other.maxFailures; this.fallbackOnFailure = other.fallbackOnFailure; this.notificationAddress = other.notificationAddress; this.notificationPeriod = other.notificationPeriod; this.resetTimeout = other.resetTimeout; this.maxRetries = other.maxRetries; this.metricsRollingBuckets = other.metricsRollingBuckets; this.metricsRollingWindow = other.metricsRollingWindow; this.failuresRollingWindow = other.failuresRollingWindow; }
Creates a new instance of CircuitBreakerOptions from the given json object.
Params:
  • json – the json object
/** * Creates a new instance of {@link CircuitBreakerOptions} from the given json object. * * @param json the json object */
public CircuitBreakerOptions(JsonObject json) { this(); CircuitBreakerOptionsConverter.fromJson(json, this); }
Returns:a json object representing the current configuration.
/** * @return a json object representing the current configuration. */
public JsonObject toJson() { JsonObject json = new JsonObject(); CircuitBreakerOptionsConverter.toJson(this, json); return json; }
Returns:the maximum number of failures before opening the circuit.
/** * @return the maximum number of failures before opening the circuit. */
public int getMaxFailures() { return maxFailures; }
Sets the maximum number of failures before opening the circuit.
Params:
  • maxFailures – the number of failures.
Returns:the current CircuitBreakerOptions instance
/** * Sets the maximum number of failures before opening the circuit. * * @param maxFailures the number of failures. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setMaxFailures(int maxFailures) { this.maxFailures = maxFailures; return this; }
Returns:the configured timeout in milliseconds.
/** * @return the configured timeout in milliseconds. */
public long getTimeout() { return timeout; }
Sets the timeout in milliseconds. If an action is not completed before this timeout, the action is considered as a failure.
Params:
  • timeoutInMs – the timeout, -1 to disable the timeout
Returns:the current CircuitBreakerOptions instance
/** * Sets the timeout in milliseconds. If an action is not completed before this timeout, the action is considered as * a failure. * * @param timeoutInMs the timeout, -1 to disable the timeout * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setTimeout(long timeoutInMs) { this.timeout = timeoutInMs; return this; }
Returns:whether or not the fallback is executed on failures, even when the circuit is closed.
/** * @return whether or not the fallback is executed on failures, even when the circuit is closed. */
public boolean isFallbackOnFailure() { return fallbackOnFailure; }
Sets whether or not the fallback is executed on failure, even when the circuit is closed.
Params:
  • fallbackOnFailure – true to enable it.
Returns:the current CircuitBreakerOptions instance
/** * Sets whether or not the fallback is executed on failure, even when the circuit is closed. * * @param fallbackOnFailure {@code true} to enable it. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setFallbackOnFailure(boolean fallbackOnFailure) { this.fallbackOnFailure = fallbackOnFailure; return this; }
Returns:the time in milliseconds before it attempts to re-close the circuit (by going to the half-open state).
/** * @return the time in milliseconds before it attempts to re-close the circuit (by going to the half-open state). */
public long getResetTimeout() { return resetTimeout; }
Sets the time in ms before it attempts to re-close the circuit (by going to the half-open state). If the circuit is closed when the timeout is reached, nothing happens. -1 disables this feature.
Params:
  • resetTimeout – the time in ms
Returns:the current CircuitBreakerOptions instance
/** * Sets the time in ms before it attempts to re-close the circuit (by going to the half-open state). If the circuit * is closed when the timeout is reached, nothing happens. {@code -1} disables this feature. * * @param resetTimeout the time in ms * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setResetTimeout(long resetTimeout) { this.resetTimeout = resetTimeout; return this; }
Returns:the eventbus address on which the circuit breaker events are published. null if this feature has been disabled.
/** * @return the eventbus address on which the circuit breaker events are published. {@code null} if this feature has * been disabled. */
public String getNotificationAddress() { return notificationAddress; }
Sets the event bus address on which the circuit breaker publish its state change.
Params:
  • notificationAddress – the address, null to disable this feature.
Returns:the current CircuitBreakerOptions instance
/** * Sets the event bus address on which the circuit breaker publish its state change. * * @param notificationAddress the address, {@code null} to disable this feature. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setNotificationAddress(String notificationAddress) { this.notificationAddress = notificationAddress; return this; }
Returns:the the period in milliseconds where the circuit breaker send a notification about its state.
/** * @return the the period in milliseconds where the circuit breaker send a notification about its state. */
public long getNotificationPeriod() { return notificationPeriod; }
Configures the period in milliseconds where the circuit breaker send a notification on the event bus with its current state.
Params:
  • notificationPeriod – the period, 0 to disable this feature.
Returns:the current CircuitBreakerOptions instance
/** * Configures the period in milliseconds where the circuit breaker send a notification on the event bus with its * current state. * * @param notificationPeriod the period, 0 to disable this feature. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setNotificationPeriod(long notificationPeriod) { this.notificationPeriod = notificationPeriod; return this; }
Returns:the configured rolling window for metrics.
/** * @return the configured rolling window for metrics. */
public long getMetricsRollingWindow() { return metricsRollingWindow; }
Sets the rolling window used for metrics.
Params:
  • metricsRollingWindow – the period in milliseconds.
Returns:the current CircuitBreakerOptions instance
/** * Sets the rolling window used for metrics. * * @param metricsRollingWindow the period in milliseconds. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setMetricsRollingWindow(long metricsRollingWindow) { this.metricsRollingWindow = metricsRollingWindow; return this; }
Returns:the configured rolling window for failures.
/** * @return the configured rolling window for failures. */
public long getFailuresRollingWindow() { return failuresRollingWindow; }
Sets the rolling window used for metrics.
Params:
  • metricsRollingWindow – the period in milliseconds.
Returns:the current CircuitBreakerOptions instance
/** * Sets the rolling window used for metrics. * * @param metricsRollingWindow the period in milliseconds. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setFailuresRollingWindow(long failureRollingWindow) { this.failuresRollingWindow = failureRollingWindow; return this; }
Returns:the configured number of buckets the rolling window is divided into.
/** * @return the configured number of buckets the rolling window is divided into. */
public int getMetricsRollingBuckets() { return metricsRollingBuckets; }
Sets the configured number of buckets the rolling window is divided into. The following must be true - metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0 - otherwise it will throw an exception. In other words, 10000/10 is okay, so is 10000/20 but 10000/7 is not.
Params:
  • metricsRollingBuckets – the number of rolling buckets.
Returns:the current CircuitBreakerOptions instance
/** * Sets the configured number of buckets the rolling window is divided into. * * The following must be true - metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0 - otherwise it will throw an exception. * * In other words, 10000/10 is okay, so is 10000/20 but 10000/7 is not. * * @param metricsRollingBuckets the number of rolling buckets. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setMetricsRollingBuckets(int metricsRollingBuckets) { this.metricsRollingBuckets = metricsRollingBuckets; return this; }
Returns:the number of times the circuit breaker tries to redo the operation before failing
/** * @return the number of times the circuit breaker tries to redo the operation before failing */
public int getMaxRetries() { return maxRetries; }
Configures the number of times the circuit breaker tries to redo the operation before failing.
Params:
  • maxRetries – the number of retries, 0 to disable this feature.
Returns:the current CircuitBreakerOptions instance
/** * Configures the number of times the circuit breaker tries to redo the operation before failing. * * @param maxRetries the number of retries, 0 to disable this feature. * @return the current {@link CircuitBreakerOptions} instance */
public CircuitBreakerOptions setMaxRetries(int maxRetries) { this.maxRetries = maxRetries; return this; } }