= Pipes Error Handler

Pipes offer a mechanism to specify an error policy to adopt in case an event produced by a `source` or consumed by a `sink`. Through the definition of an `errorHandler` you will be able to apply certain logic to the failing event, such as simply logging, ignoring the event or posting the event to another `Sink`.

.my-binding.yaml
[source,yaml,subs="attributes+"]
----
apiVersion: camel.apache.org/v1
kind: Pipe
metadata:
  name: my-binding
spec:
  source: # <1>
...
  sink: # <2>
...
  errorHandler: # <3>
----
<1> Reference to the source that provides data
<2> Reference to the sink where data should be sent to
<3> Error Handler Configuration

[[bindings-error-handler-types]]
== Error Handler Types

We have different types of error handler: `none`, `log` and `sink`. The `errorHandler` parameter is optional.

[[bindings-error-handler-none]]
=== No error handler

There may be certain cases where you want to just ignore any failure happening on your integration. In this situation just use a `none` error handler.

.my-binding.yaml
[source,yaml,subs="attributes+"]
----
apiVersion: camel.apache.org/v1
kind: Pipe
metadata:
  name: my-binding
spec:
  source:
...
  sink:
...
  errorHandler:
    none: # <1>
----
<1> `none` error handler does not expect any configuration

[[bindings-error-handler-log]]
=== Log error handler

Apache Camel offers a default behavior for handling any failure: log to standard output. However you can use the `log` error handler to specify other behaviors such as redelivery or delay policy.

.my-binding.yaml
[source,yaml,subs="attributes+"]
----
apiVersion: camel.apache.org/v1
kind: Pipe
metadata:
  name: my-binding
spec:
  source:
...
  sink:
...
  errorHandler:
    log:
      parameters: # <1>
        maximumRedeliveries: 3
        redeliveryDelay: 2000
----
<1> Parameters belonging to the `log` error handler type

[[bindings-error-handler-sink]]
=== Sink error handler

The `Sink` is probably the most interesting error handler type as it allows you to redirect any failing event to any other component, such as a third party URI, a queue or even another `Kamelet` which will be performing certain logic with the failing event.

.my-binding.yaml
[source,yaml,subs="attributes+"]
----
apiVersion: camel.apache.org/v1
kind: Pipe
metadata:
  name: my-binding
spec:
  source:
...
  sink:
...
  errorHandler:
    sink:
      endpoint:
        ref: # <1>
          kind: Kamelet
          apiVersion: camel.apache.org/v1
          name: error-handler
        properties:
          message: "ERROR!" # <2>
          ...
      parameters:
        maximumRedeliveries: 1 # <3>
        ...
----
<1> You can use `ref` or `uri`. `ref` will be interpreted by the operator according the `kind`, `apiVersion` and `name`. You can use any `Kamelet`, `KafkaTopic` channel or `Knative` destination.
<2> Properties belonging to the endpoint (in this example, to the `Kamelet` named error handler)
<3> Parameters belonging to the `sink` error handler type
