class CircuitBreaker extends AbstractCircuitBreaker
Provides circuit breaker functionality for 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
- Alphabetic
- By Inheritance
- CircuitBreaker
- AbstractCircuitBreaker
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new CircuitBreaker(scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration, maxResetTimeout: FiniteDuration, exponentialBackoffFactor: Double)(implicit executor: ExecutionContext)
- new CircuitBreaker(scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration)(implicit executor: ExecutionContext)
- new CircuitBreaker(executor: ExecutionContext, scheduler: Scheduler, maxFailures: Int, callTimeout: Duration, resetTimeout: Duration)
- new CircuitBreaker(scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration, maxResetTimeout: FiniteDuration, exponentialBackoffFactor: Double, randomFactor: Double)(implicit executor: ExecutionContext)
- new CircuitBreaker(scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration, maxResetTimeout: FiniteDuration, exponentialBackoffFactor: Double, randomFactor: Double, allowExceptions: Set[String], telemetry: CircuitBreakerTelemetry)(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
- randomFactor
after calculation of the exponential back-off an additional random delay based on this factor is added, e.g.
0.2
adds up to20%
delay. randomFactor should be in range0.0
(inclusive) and1.0
(inclusive). In order to skip this additional delay pass in0
.- executor
scala.concurrent.ExecutionContext used for execution of state transition listeners
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- def +(other: String): String
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toany2stringadd[CircuitBreaker] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
- def ->[B](y: B): (CircuitBreaker, B)
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toArrowAssoc[CircuitBreaker] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def addOnCallBreakerOpenListener(callback: Runnable): CircuitBreaker
JavaAPI for onCallBreakerOpen.
JavaAPI for onCallBreakerOpen.
- callback
Handler to be invoked on call failed due to open breaker.
- returns
CircuitBreaker for fluent usage
- def addOnCallFailureListener(callback: Consumer[Long]): CircuitBreaker
JavaAPI for onCallFailure.
JavaAPI for onCallFailure.
- callback
Handler to be invoked on failed call, where passed value is elapsed time in nanoseconds.
- returns
CircuitBreaker for fluent usage
- def addOnCallSuccessListener(callback: Consumer[Long]): CircuitBreaker
JavaAPI for onCallSuccess
JavaAPI for onCallSuccess
- callback
Handler to be invoked on successful call, where passed value is elapsed time in nanoseconds.
- returns
CircuitBreaker for fluent usage
- def addOnCallTimeoutListener(callback: Consumer[Long]): CircuitBreaker
JavaAPI for onCallTimeout.
JavaAPI for onCallTimeout.
- callback
Handler to be invoked on call finished with timeout, where passed value is elapsed time in nanoseconds.
- returns
CircuitBreaker for fluent usage
- def addOnCloseListener(callback: Runnable): CircuitBreaker
JavaAPI for onClose
JavaAPI for onClose
- callback
Handler to be invoked on state change
- returns
CircuitBreaker for fluent usage
- def addOnHalfOpenListener(callback: Runnable): CircuitBreaker
JavaAPI for onHalfOpen
JavaAPI for onHalfOpen
- callback
Handler to be invoked on state change
- returns
CircuitBreaker for fluent usage
- def addOnOpenListener(callback: Runnable): CircuitBreaker
Java API for onOpen
Java API for onOpen
- callback
Handler to be invoked on state change
- returns
CircuitBreaker for fluent usage
- val allowExceptions: Set[String]
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def callWithCircuitBreaker[T](body: Callable[Future[T]], defineFailureFn: BiFunction[Optional[T], Optional[Throwable], Boolean]): Future[T]
Java API for #withCircuitBreaker.
Java API for #withCircuitBreaker.
- body
Call needing protected
- defineFailureFn
function that define what should be consider failure and thus increase failure count
- returns
scala.concurrent.Future containing the call result or a
scala.concurrent.TimeoutException
if the call timed out
- 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
- def callWithCircuitBreakerCS[T](body: Callable[CompletionStage[T]], defineFailureFn: BiFunction[Optional[T], Optional[Throwable], Boolean]): CompletionStage[T]
Java API (8) for #withCircuitBreaker.
Java API (8) for #withCircuitBreaker.
- body
Call needing protected
- defineFailureFn
function that define what should be consider failure and thus increase failure count
- returns
java.util.concurrent.CompletionStage containing the call result or a
scala.concurrent.TimeoutException
if the call timed out
- 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
- def callWithSyncCircuitBreaker[T](body: Callable[T], defineFailureFn: BiFunction[Optional[T], Optional[Throwable], Boolean]): T
Java API for #withSyncCircuitBreaker.
Java API for #withSyncCircuitBreaker. Throws java.util.concurrent.TimeoutException if the call timed out.
- body
Call needing protected
- defineFailureFn
function that define what should be consider failure and thus increase failure count
- returns
The result of the call
- 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
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @HotSpotIntrinsicCandidate() @native()
- def ensuring(cond: (CircuitBreaker) => Boolean, msg: => Any): CircuitBreaker
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toEnsuring[CircuitBreaker] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: (CircuitBreaker) => Boolean): CircuitBreaker
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toEnsuring[CircuitBreaker] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean, msg: => Any): CircuitBreaker
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toEnsuring[CircuitBreaker] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean): CircuitBreaker
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toEnsuring[CircuitBreaker] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- 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
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- 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.
- 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.
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- 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.
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- def onCallBreakerOpen(callback: => Unit): CircuitBreaker
Adds a callback to execute if call was failed due to open breaker.
Adds a callback to execute if call was failed due to open breaker.
The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.
- callback
Handler to be invoked on call failed due to open breaker.
- returns
CircuitBreaker for fluent usage
- def onCallFailure(callback: (Long) => Unit): CircuitBreaker
Adds a callback to execute if the call finished with failure.
Adds a callback to execute if the call finished with failure.
The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.
- callback
Handler to be invoked on failed call, where passed value is elapsed time in nanoseconds.
- returns
CircuitBreaker for fluent usage
- def onCallSuccess(callback: (Long) => Unit): CircuitBreaker
Adds a callback to execute when call finished with success.
Adds a callback to execute when call finished with success.
The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.
- callback
Handler to be invoked on successful call, where passed value is elapsed time in nanoseconds.
- returns
CircuitBreaker for fluent usage
- def onCallTimeout(callback: (Long) => Unit): CircuitBreaker
Adds a callback to execute if a call finished with timeout.
Adds a callback to execute if a call finished with timeout.
The callback is run in the scala.concurrent.ExecutionContext supplied in the constructor.
- callback
Handler to be invoked on call finished with timeout, where passed value is elapsed time in nanoseconds.
- returns
CircuitBreaker for fluent usage
- 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
- 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
- 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
- val resetTimeout: FiniteDuration
- 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
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- val telemetry: CircuitBreakerTelemetry
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- 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
- def withCircuitBreaker[T](body: => Future[T], defineFailureFn: (Try[T]) => Boolean): 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
- defineFailureFn
function that define what should be consider failure and thus increase failure count
- returns
scala.concurrent.Future containing the call result or a
scala.concurrent.TimeoutException
if the call timed out
- def withExponentialBackoff(maxResetTimeout: Duration): 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
- 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
- def withRandomFactor(randomFactor: Double): CircuitBreaker
Adds jitter to the delay.
Adds jitter to the delay.
- randomFactor
after calculation of the back-off an additional random delay based on this factor is added, e.g. 0.2 adds up to 20% delay. In order to skip this additional delay pass in 0.
- def withSyncCircuitBreaker[T](body: => T, defineFailureFn: (Try[T]) => Boolean): 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
- defineFailureFn
function that define what should be consider failure and thus increase failure count
- returns
The result of the call
- 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 the 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
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
(Since version 9)
- def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toStringFormat[CircuitBreaker] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @deprecated @inline()
- Deprecated
(Since version 2.12.16) Use
formatString.format(value)
instead ofvalue.formatted(formatString)
, or use thef""
string interpolator. In Java 15 and later,formatted
resolves to the new method in String which has reversed parameters.
- def →[B](y: B): (CircuitBreaker, B)
- Implicit
- This member is added by an implicit conversion from CircuitBreaker toArrowAssoc[CircuitBreaker] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @deprecated
- Deprecated
(Since version 2.13.0) Use
->
instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.