Packages

class CircuitBreaker extends AbstractCircuitBreaker

Provides circuit breaker functionality to provide stability when working with "dangerous" operations, e.g. calls to remote systems

Transitions through three states: - In *Closed* state, calls pass through until the maxFailures count is reached. This causes the circuit breaker to open. Both exceptions and calls exceeding callTimeout are considered failures. - In *Open* state, calls fail-fast with an exception. After resetTimeout, circuit breaker transitions to half-open state. - In *Half-Open* state, the first call will be allowed through, if it succeeds the circuit breaker will reset to closed state. If it fails, the circuit breaker will re-open to open state. All calls beyond the first that execute while the first is running will fail-fast with an exception.

Source
CircuitBreaker.scala
Linear Supertypes
AbstractCircuitBreaker, AnyRef, Any
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. CircuitBreaker
  2. AbstractCircuitBreaker
  3. AnyRef
  4. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new CircuitBreaker(scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration)(implicit executor: ExecutionContext)
  2. new CircuitBreaker(executor: ExecutionContext, scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration)
  3. new CircuitBreaker(scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration, maxResetTimeout: FiniteDuration, exponentialBackoffFactor: Double)(implicit executor: ExecutionContext)

    scheduler

    Reference to Akka scheduler

    maxFailures

    Maximum number of failures before opening the circuit

    callTimeout

    scala.concurrent.duration.FiniteDuration of time after which to consider a call a failure

    resetTimeout

    scala.concurrent.duration.FiniteDuration of time after which to attempt to close the circuit

    executor

    scala.concurrent.ExecutionContext used for execution of state transition listeners

Value Members

  1. def callWithCircuitBreaker[T](body: Callable[Future[T]]): Future[T]

    Java API for #withCircuitBreaker

    Java API for #withCircuitBreaker

    body

    Call needing protected

    returns

    scala.concurrent.Future containing the call result or a scala.concurrent.TimeoutException if the call timed out

  2. def callWithCircuitBreakerCS[T](body: Callable[CompletionStage[T]]): CompletionStage[T]

    Java API (8) for #withCircuitBreaker

    Java API (8) for #withCircuitBreaker

    body

    Call needing protected

    returns

    java.util.concurrent.CompletionStage containing the call result or a scala.concurrent.TimeoutException if the call timed out

  3. def callWithSyncCircuitBreaker[T](body: Callable[T]): T

    Java API for #withSyncCircuitBreaker.

    Java API for #withSyncCircuitBreaker. Throws java.util.concurrent.TimeoutException if the call timed out.

    body

    Call needing protected

    returns

    The result of the call

  4. def fail(): Unit

    Mark a failed call through CircuitBreaker.

    Mark a failed call through CircuitBreaker. Sometimes the callee of CircuitBreaker sends back a message to the caller Actor. In such a case, it is convenient to mark a failed call instead of using Future via withCircuitBreaker

  5. def isClosed: Boolean

    Return true if the internal state is Closed.

    Return true if the internal state is Closed. WARNING: It is a "power API" call which you should use with care. Ordinal use cases of CircuitBreaker expects a remote call to return Future, as in withCircuitBreaker. So, if you check the state by yourself, and make a remote call outside CircuitBreaker, you should manage the state yourself.

  6. def isHalfOpen: Boolean

    Return true if the internal state is HalfOpen.

    Return true if the internal state is HalfOpen. WARNING: It is a "power API" call which you should use with care. Ordinal use cases of CircuitBreaker expects a remote call to return Future, as in withCircuitBreaker. So, if you check the state by yourself, and make a remote call outside CircuitBreaker, you should manage the state yourself.

  7. def isOpen: Boolean

    Return true if the internal state is Open.

    Return true if the internal state is Open. WARNING: It is a "power API" call which you should use with care. Ordinal use cases of CircuitBreaker expects a remote call to return Future, as in withCircuitBreaker. So, if you check the state by yourself, and make a remote call outside CircuitBreaker, you should manage the state yourself.

  8. def onClose(callback: Runnable): CircuitBreaker

    JavaAPI for onClose

    JavaAPI for onClose

    callback

    Handler to be invoked on state change

    returns

    CircuitBreaker for fluent usage

  9. def onClose(callback: ⇒ Unit): CircuitBreaker

    Adds a callback to execute when circuit breaker state closes

    Adds a callback to execute when circuit breaker state closes

    The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.

    callback

    Handler to be invoked on state change

    returns

    CircuitBreaker for fluent usage

  10. def onHalfOpen(callback: Runnable): CircuitBreaker

    JavaAPI for onHalfOpen

    JavaAPI for onHalfOpen

    callback

    Handler to be invoked on state change

    returns

    CircuitBreaker for fluent usage

  11. def onHalfOpen(callback: ⇒ Unit): CircuitBreaker

    Adds a callback to execute when circuit breaker transitions to half-open The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.

    Adds a callback to execute when circuit breaker transitions to half-open The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.

    callback

    Handler to be invoked on state change

    returns

    CircuitBreaker for fluent usage

  12. def onOpen(callback: Runnable): CircuitBreaker

    Java API for onOpen

    Java API for onOpen

    callback

    Handler to be invoked on state change

    returns

    CircuitBreaker for fluent usage

  13. def onOpen(callback: ⇒ Unit): CircuitBreaker

    Adds a callback to execute when circuit breaker opens

    Adds a callback to execute when circuit breaker opens

    The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.

    callback

    Handler to be invoked on state change

    returns

    CircuitBreaker for fluent usage

  14. def succeed(): Unit

    Mark a successful call through CircuitBreaker.

    Mark a successful call through CircuitBreaker. Sometimes the callee of CircuitBreaker sends back a message to the caller Actor. In such a case, it is convenient to mark a successful call instead of using Future via withCircuitBreaker

  15. def withCircuitBreaker[T](body: ⇒ Future[T]): Future[T]

    Wraps invocations of asynchronous calls that need to be protected

    Wraps invocations of asynchronous calls that need to be protected

    body

    Call needing protected

    returns

    scala.concurrent.Future containing the call result or a scala.concurrent.TimeoutException if the call timed out

  16. def withExponentialBackoff(maxResetTimeout: FiniteDuration): CircuitBreaker

    The resetTimeout will be increased exponentially for each failed attempt to close the circuit.

    The resetTimeout will be increased exponentially for each failed attempt to close the circuit. The default exponential backoff factor is 2.

    maxResetTimeout

    the upper bound of resetTimeout

  17. def withSyncCircuitBreaker[T](body: ⇒ T): T

    Wraps invocations of synchronous calls that need to be protected

    Wraps invocations of synchronous calls that need to be protected

    Calls are run in caller's thread. Because of the synchronous nature of this call the scala.concurrent.TimeoutException will only be thrown after the body has completed.

    Throws java.util.concurrent.TimeoutException if the call timed out.

    body

    Call needing protected

    returns

    The result of the call