[[zookeeper-component]]
= ZooKeeper Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-zookeeper/src/main/docs/zookeeper-component.adoc
:docTitle: ZooKeeper
:artifactId: camel-zookeeper
:description: Manage ZooKeeper clusters.
:since: 2.9
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

The ZooKeeper component allows interaction with a
http://hadoop.apache.org/zookeeper/[ZooKeeper] cluster and exposes the
following features to Camel:

1.  Creation of nodes in any of the ZooKeeper create modes.
2.  Get and Set the data contents of arbitrary cluster nodes (data
being set must be convertible to `byte[]`).
3.  Create and retrieve the list the child nodes attached to a
particular node.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

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

== URI format

[source]
----
zookeeper://zookeeper-server[:port][/path][?options]
----

The path from the URI specifies the node in the ZooKeeper server (a.k.a.
_znode_) that will be the target of the endpoint:

== Options

// component options: START
The ZooKeeper component supports 11 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *listChildren* (common) | Whether the children of the node should be listed | false | boolean
| *timeout* (common) | The time interval to wait on connection before timing out. | 5000 | int
| *backoff* (consumer) | The time interval to backoff for after an error before retrying. | 5000 | long
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *repeat* (consumer) | Should changes to the znode be 'watched' and repeatedly processed. | false | boolean
| *sendEmptyMessageOnDelete* (consumer) | Upon the delete of a znode, should an empty message be send to the consumer | true | boolean
| *create* (producer) | Should the endpoint create the node if it does not currently exist. | false | boolean
| *createMode* (producer) | The create mode that should be used for the newly created node. The value can be one of: PERSISTENT, PERSISTENT_SEQUENTIAL, EPHEMERAL, EPHEMERAL_SEQUENTIAL | EPHEMERAL | String
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *configuration* (advanced) | To use a shared ZooKeeperConfiguration |  | ZooKeeperConfiguration
|===
// component options: END

// endpoint options: START
The ZooKeeper endpoint is configured using URI syntax:

----
zookeeper:serverUrls/path
----

with the following path and query parameters:

=== Path Parameters (2 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *serverUrls* | *Required* The zookeeper server hosts (multiple servers can be separated by comma) |  | String
| *path* | *Required* The node in the ZooKeeper server (aka znode) |  | String
|===


=== Query Parameters (13 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *listChildren* (common) | Whether the children of the node should be listed | false | boolean
| *timeout* (common) | The time interval to wait on connection before timing out. | 5000 | int
| *backoff* (consumer) | The time interval to backoff for after an error before retrying. | 5000 | long
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *repeat* (consumer) | Should changes to the znode be 'watched' and repeatedly processed. | false | boolean
| *sendEmptyMessageOnDelete* (consumer) | Upon the delete of a znode, should an empty message be send to the consumer | true | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
| *create* (producer) | Should the endpoint create the node if it does not currently exist. | false | boolean
| *createMode* (producer) | The create mode that should be used for the newly created node. The value can be one of: PERSISTENT, PERSISTENT_SEQUENTIAL, EPHEMERAL, EPHEMERAL_SEQUENTIAL | EPHEMERAL | String
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END



== Use cases

=== Reading from a _znode_

The following snippet will read the data from the _znode_
`/somepath/somenode/` provided that it already exists. The data
retrieved will be placed into an exchange and passed onto
the rest of the route:

[source,java]
----
from("zookeeper://localhost:39913/somepath/somenode").to("mock:result");
----

If the node does not yet exist then a flag can be supplied to have the
endpoint await its creation:

[source,java]
----
from("zookeeper://localhost:39913/somepath/somenode?awaitCreation=true").to("mock:result");
----

=== Reading from a _znode_

When data is read due to a `WatchedEvent` received from the ZooKeeper
ensemble, the `CamelZookeeperEventType` header holds ZooKeeper's
http://zookeeper.apache.org/doc/current/api/org/apache/zookeeper/Watcher.Event.EventType.html[`EventType`]
value from that `WatchedEvent`. If the data is read initially (not
triggered by a `WatchedEvent`) the `CamelZookeeperEventType` header will not
be set.

=== Writing to a _znode_

The following snippet will write the payload of the exchange into the
znode at `/somepath/somenode/` provided that it already exists:

[source,java]
----
from("direct:write-to-znode")
    .to("zookeeper://localhost:39913/somepath/somenode");
----

For flexibility, the endpoint allows the target _znode_ to be specified
dynamically as a message header. If a header keyed by the string
`CamelZooKeeperNode` is present then the value of the header will be
used as the path to the _znode_ on the server. For instance using the same
route definition above, the following code snippet will write the data
not to `/somepath/somenode` but to the path from the header
`/somepath/someothernode`.

WARNING: the `testPayload` must be convertible
to `byte[]` as the data stored in ZooKeeper is byte based.

[source,java]
----
Object testPayload = ...
template.sendBodyAndHeader("direct:write-to-znode", testPayload, "CamelZooKeeperNode", "/somepath/someothernode");
----

To also create the node if it does not exist the `create` option should
be used.

[source,java]
----
from("direct:create-and-write-to-znode")
    .to("zookeeper://localhost:39913/somepath/somenode?create=true");
----

It is also possible to *delete* a node using the
header `CamelZookeeperOperation` by setting it to `DELETE`:

[source,java]
----
from("direct:delete-znode")
    .setHeader(ZooKeeperMessage.ZOOKEEPER_OPERATION, constant("DELETE"))
    .to("zookeeper://localhost:39913/somepath/somenode");
----

or equivalently:

[source,xml]
----
<route>
  <from uri="direct:delete-znode" />
  <setHeader name="CamelZookeeperOperation">
     <constant>DELETE</constant>
  </setHeader>
  <to uri="zookeeper://localhost:39913/somepath/somenode" />
</route>
----

ZooKeeper nodes can have different types; they can be 'Ephemeral' or
'Persistent' and 'Sequenced' or 'Unsequenced'. For further information
of each type you can check
http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html#Ephemeral+Nodes[here].
By default endpoints will create unsequenced, ephemeral nodes, but the
type can be easily manipulated via a uri config parameter or via a
special message header. The values expected for the create mode are
simply the names from the `CreateMode` enumeration:

* `PERSISTENT`
* `PERSISTENT_SEQUENTIAL`
* `EPHEMERAL`
* `EPHEMERAL_SEQUENTIAL`

For example to create a persistent _znode_ via the URI config:

[source,java]
----
from("direct:create-and-write-to-persistent-znode")
    .to("zookeeper://localhost:39913/somepath/somenode?create=true&createMode=PERSISTENT");
----

or using the header `CamelZookeeperCreateMode`.

WARNING: the `testPayload` must be convertible to `byte[]` as the data stored in
ZooKeeper is byte based.

[source,java]
----
Object testPayload = ...
template.sendBodyAndHeader("direct:create-and-write-to-persistent-znode", testPayload, "CamelZooKeeperCreateMode", "PERSISTENT");
----


include::camel-spring-boot::page$zookeeper-starter.adoc[]
