[[hystrix-eip]]
= Hystrix EIP
:page-source: core/camel-core-engine/src/main/docs/eips/hystrix-eip.adoc

*Available as of Camel 2.18*

The Hystrix EIP provides integration with Netflix https://github.com/Netflix/Hystrix[Hystrix] to be used as circuit breaker in the Camel routes. Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.

NOTE: Camel provides the Circuit Breaker EIP in the route model, which allows to plugin different implementations.
Hystrix is one such implementation.

Maven users will need to add the following dependency to their pom.xml to use this EIP:

[source,xml]
----
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-hystrix</artifactId>
    <version>x.x.x</version><!-- use the same version as your Camel core version -->
</dependency>
----

== Configuration options

// eip options: START
The Hystrix EIP supports 2 options which are listed below:

[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *hystrixConfiguration* | Configures the Hystrix EIP Use end when configuration is complete, to return back to the Hystrix EIP. |  | HystrixConfigurationDefinition
| *hystrixConfigurationRef* | Refers to a Hystrix configuration to use for configuring the Hystrix EIP. |  | String
|===
// eip options: END

See xref:hystrixConfiguration-eip.adoc[Hystrix Configuration] for all the configuration options on Hystrix EIP.

== Samples

Below is an example route showing an Hystrix endpoint that protects against slow operation by falling back to the in-lined fallback route. By default the timeout request is just *1000ms* so the HTTP endpoint has to be fairly quick to succeed.
[source,java]
----
from("direct:start")
    .circuitBreaker()
        .to("http://fooservice.com/slow")
    .onFallback()
        .transform().constant("Fallback message")
    .end()
    .to("mock:result");
----

And in XML DSL:
[source,xml]
----
<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:start"/>
    <circuitBreaker>
      <to uri="http://fooservice.com/slow"/>
      <onFallback>
        <transform>
          <constant>Fallback message</constant>
        </transform>
      </onFallback>
    </circuitBreaker>
    <to uri="mock:result"/>
  </route>
</camelContext>
----

== Configuring Hystrix

You can fine-tune Hystrix by the many xref:hystrixConfiguration-eip.adoc[Hystrix Configuration] options.
For example to use a 2 second execution timeout, you can do as follows:

[source,java]
----
from("direct:start")
    .circuitBreaker()
        // use 2 second timeout
        .hystrixConfiguration().executionTimeoutInMilliseconds(2000).end()
        .log("Hystrix processing start: ${threadName}")
        .toD("direct:${body}")
        .log("Hystrix processing end: ${threadName}")
    .end()
    .log("After Hystrix ${body}");
----

And in XML:

[source,xml]
----
<route>
  <from uri="direct:start"/>
  <circuitBreaker>
    <hystrixConfiguration executionTimeoutInMilliseconds="2000"/>
    <log message="Hystrix processing start: ${threadName}"/>
    <toD uri="direct:${body}"/>
    <log message="Hystrix processing end: ${threadName}"/>
  </circuitBreaker>
  <log message="After Hystrix: ${body}"/>
</route>
----

== Fallback

See xref:onFallback-eip.adoc[onFallback].

== Other examples

You can find an example with the source code: https://github.com/apache/camel/tree/master/examples/camel-example-hystrix[camel-example-hystrix].

== Using Hystrix with Spring Boot

See the xref:components::hystrix.adoc[Hystrix Component].

== Camel's Error Handler and Circuit Breaker EIP

By default the Circuit Breaker EIP handles errors by itself. This means if the circuit breaker is open and
the message fails, then Camel's error handler is not reacting also.
However, you can enable Camels error handler with circuit breaker by enabling the `inheritErrorHandler` option, as shown:

[source,java]
----
// Camel's error handler that will attempt to redeliver the message 3 times
errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(3).redeliveryDelay(0));

from("direct:start")
    .to("log:start")
    // turn on Camel's error handler on circuit breaker so Camel can do redeliveries
    .circuitBreaker().inheritErrorHandler(true)
        .to("mock:a")
        .throwException(new IllegalArgumentException("Forced"))
    .end()
    .to("log:result")
    .to("mock:result");
----

This example is from an unit test, where you can see the Circuit Breaker EIP block has been hardcoded
to always fail by throwing an exception. Because the `inheritErrorHandler` has been enabled,
then Camel's error handler will attempt to call the Circuit Breaker EIP block again.

That means the `mock:a` endpoint will receive the message again, and a total of 1 + 3 = 4 message
(first time + 3 redeliveries).

If we turn off the `inheritErrorHandler` option (default) then the Circuit Breaker EIP will only be
executed once because it handled the error itself.

