[[master-component]]
= Master Component
:page-source: components/camel-master/src/main/docs/master-component.adoc

*Available as of Camel version 2.20*

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 3 options, which are listed below.



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

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

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


The component supports 4 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.master.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.master.enabled* | Whether to enable auto configuration of the master component. This is enabled by default. |  | Boolean
| *camel.component.master.service* | Inject the service to use. The option is a org.apache.camel.cluster.CamelClusterService type. |  | String
| *camel.component.master.service-selector* | Inject the service selector used to lookup the CamelClusterService to use. The option is a org.apache.camel.cluster.CamelClusterService.Selector type. |  | String
|===
// spring-boot-auto-configure 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

