[[master-component]]
= Master Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-master/src/main/docs/master-component.adoc
:docTitle: Master
:artifactId: camel-master
:description: Have only a single consumer in a cluster consuming from a given endpoint; with automatic failover if the JVM dies.
:since: 2.20
:supportLevel: Stable
:component-header: Only consumer is supported

*Since Camel {since}*

*{component-header}*

The Camel-Master endpoint provides a way to ensure only a single consumer in a cluster consumes from a given endpoint;
with automatic failover if that JVM dies.

This can be very useful if you need to consume from some legacy back end which either doesn't support concurrent
consumption or due to commercial or stability reasons you can only have a single connection at any point in time.

== Using the master endpoint

Just prefix any camel endpoint with **master:someName:** where _someName_ is a logical name and is
used to acquire the master lock. e.g.

```
from("master:cheese:jms:foo").to("activemq:wine");
```
The above simulates the [Exclusive Consumers](http://activemq.apache.org/exclusive-consumer.html) type feature in
ActiveMQ; but on any third party JMS provider which maybe doesn't support exclusive consumers.


== URI format

[source]
----
master:namespace:endpoint[?options]
----

Where endpoint is any Camel endpoint you want to run in master/slave mode.


== Options

// component options: START
The Master component supports 4 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *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
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *service* (advanced) | Inject the service to use. |  | CamelClusterService
| *serviceSelector* (advanced) | Inject the service selector used to lookup the CamelClusterService to use. |  | Selector
|===
// component options: END

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

----
master:namespace:delegateUri
----

with the following path and query parameters:

=== Path Parameters (2 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *namespace* | *Required* The name of the cluster namespace to use |  | String
| *delegateUri* | *Required* The endpoint uri to use in master/slave mode |  | String
|===


=== Query Parameters (5 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *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
| *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
| *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


== Example

You can protect a clustered Camel application to only consume files from one active node.


[source,java]
----
// the file endpoint we want to consume from
String url = "file:target/inbox?delete=true";

// use the camel master component in the clustered group named myGroup
// to run a master/slave mode in the following Camel url
from("master:myGroup:" + url)
    .log(name + " - Received file: ${file:name}")
    .delay(delay)
    .log(name + " - Done file:     ${file:name}")
    .to("file:target/outbox");
----

The master component leverages CamelClusterService you can configure using

* *Java*
+
[source,java]
----
ZooKeeperClusterService service = new ZooKeeperClusterService();
service.setId("camel-node-1");
service.setNodes("myzk:2181");
service.setBasePath("/camel/cluster");

context.addService(service)
----

* *Xml (Spring/Blueprint)*
+
[source,xml]
----
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://camel.apache.org/schema/spring
     http://camel.apache.org/schema/spring/camel-spring.xsd">


  <bean id="cluster" class="org.apache.camel.component.zookeeper.cluster.ZooKeeperClusterService">
    <property name="id" value="camel-node-1"/>
    <property name="basePath" value="/camel/cluster"/>
    <property name="nodes" value="myzk:2181"/>
  </bean>

  <camelContext xmlns="http://camel.apache.org/schema/spring" autoStartup="false">
    ...
  </camelContext>

</beans>
----

* *Spring boot*
+
[source,properties]
----
camel.component.zookeeper.cluster.service.enabled   = true
camel.component.zookeeper.cluster.service.id        = camel-node-1
camel.component.zookeeper.cluster.service.base-path = /camel/cluster
camel.component.zookeeper.cluster.service.nodes     = myzk:2181
----

== Implementations

Camel provide the following ClusterService implementations:

- camel-atomix
- camel-consul
- camel-file
- camel-kubernetes
- camel-zookeeper


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