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
- Alphabetic
- By Inheritance
- CircuitBreaker
- AbstractCircuitBreaker
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
- new CircuitBreaker(scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration)(implicit executor: ExecutionContext)
- new CircuitBreaker(executor: ExecutionContext, scheduler: Scheduler, maxFailures: Int, callTimeout: FiniteDuration, resetTimeout: FiniteDuration)
-
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
-
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 to any2stringadd[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 to ArrowAssoc[CircuitBreaker] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
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]]): 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]): 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[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
def
ensuring(cond: (CircuitBreaker) ⇒ Boolean, msg: ⇒ Any): CircuitBreaker
- Implicit
- This member is added by an implicit conversion from CircuitBreaker to Ensuring[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 to Ensuring[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 to Ensuring[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 to Ensuring[CircuitBreaker] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): 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
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from CircuitBreaker to StringFormat[CircuitBreaker] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
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
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
def
onClose(callback: Runnable): CircuitBreaker
JavaAPI for onClose
JavaAPI for onClose
- callback
Handler to be invoked on state change
- 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: Runnable): CircuitBreaker
JavaAPI for onHalfOpen
JavaAPI for onHalfOpen
- 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: Runnable): CircuitBreaker
Java API for onOpen
Java API for onOpen
- 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
-
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
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
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
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
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
-
def
→[B](y: B): (CircuitBreaker, B)
- Implicit
- This member is added by an implicit conversion from CircuitBreaker to ArrowAssoc[CircuitBreaker] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc