[[rabbitmq-component]]
= RabbitMQ Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-rabbitmq/src/main/docs/rabbitmq-component.adoc
:docTitle: RabbitMQ
:artifactId: camel-rabbitmq
:description: Send and receive messages from RabbitMQ instances.
:since: 2.12
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

The RabbitMQ component allows you to produce and consume messages from
http://www.rabbitmq.com/[RabbitMQ] instances. Using the RabbitMQ AMQP
client, this component offers a pure RabbitMQ approach over the generic
http://camel.apache.org/amqp.html[AMQP] component.

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-rabbitmq</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
----

== URI format

The old syntax is *deprecated*:
[source,text]
----
rabbitmq://hostname[:port]/exchangeName?[options]
----
Where *hostname* is the hostname of the running rabbitmq instance or
cluster. Port is optional and if not specified then defaults to the
RabbitMQ client default (5672).

Instead the hostname and port is configured on the component level, or
can be provided as uri query parameters instead.

The new syntax is:
[source,text]
----
rabbitmq:exchangeName?[options]
----

The exchange name determines the exchange to which the produced 
messages will be sent to. In the case of consumers, the exchange name 
determines the exchange the queue will be bound to.

== Options

// component options: START
The RabbitMQ component supports 53 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *addresses* (common) | If this option is set, camel-rabbitmq will try to create connection based on the setting of option addresses. The addresses value is a string which looks like server1:12345, server2:12345 |  | String
| *autoDelete* (common) | If it is true, the exchange will be deleted when it is no longer in use | true | boolean
| *connectionFactory* (common) | To use a custom RabbitMQ connection factory. When this option is set, all connection options (connectionTimeout, requestedChannelMax...) set on URI are not used |  | ConnectionFactory
| *deadLetterExchange* (common) | The name of the dead letter exchange |  | String
| *deadLetterExchangeType* (common) | The type of the dead letter exchange. The value can be one of: direct, fanout, headers, topic | direct | String
| *deadLetterQueue* (common) | The name of the dead letter queue |  | String
| *deadLetterRoutingKey* (common) | The routing key for the dead letter exchange |  | String
| *declare* (common) | If the option is true, camel declare the exchange and queue name and bind them together. If the option is false, camel won't declare the exchange and queue name on the server. | true | boolean
| *durable* (common) | If we are declaring a durable exchange (the exchange will survive a server restart) | true | boolean
| *exclusive* (common) | Exclusive queues may only be accessed by the current connection, and are deleted when that connection closes. | false | boolean
| *hostname* (common) | The hostname of the running RabbitMQ instance or cluster. |  | String
| *passive* (common) | Passive queues depend on the queue already to be available at RabbitMQ. | false | boolean
| *portNumber* (common) | Port number for the host with the running rabbitmq instance or cluster. | 5672 | int
| *skipExchangeDeclare* (common) | This can be used if we need to declare the queue but not the exchange | false | boolean
| *skipQueueBind* (common) | If true the queue will not be bound to the exchange after declaring it | false | boolean
| *skipQueueDeclare* (common) | If true the producer will not declare and bind a queue. This can be used for directing messages via an existing routing key. | false | boolean
| *vhost* (common) | The vhost for the channel | / | String
| *autoAck* (consumer) | If messages should be auto acknowledged | true | boolean
| *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
| *exclusiveConsumer* (consumer) | Request exclusive access to the queue (meaning only this consumer can access the queue). This is useful when you want a long-lived shared queue to be temporarily accessible by just one consumer. | false | boolean
| *prefetchCount* (consumer) | The maximum number of messages that the server will deliver, 0 if unlimited. You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time |  | int
| *prefetchEnabled* (consumer) | Enables the quality of service on the RabbitMQConsumer side. You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time | false | boolean
| *prefetchGlobal* (consumer) | If the settings should be applied to the entire channel rather than each consumer You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time | false | boolean
| *prefetchSize* (consumer) | The maximum amount of content (measured in octets) that the server will deliver, 0 if unlimited. You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time |  | int
| *threadPoolSize* (consumer) | The consumer uses a Thread Pool Executor with a fixed number of threads. This setting allows you to set that number of threads. | 10 | int
| *allowNullHeaders* (producer) | Allow pass null values to header | false | boolean
| *channelPoolMaxSize* (producer) | Get maximum number of opened channel in pool | 10 | int
| *channelPoolMaxWait* (producer) | Set the maximum number of milliseconds to wait for a channel from the pool | 1000 | long
| *guaranteedDeliveries* (producer) | When true, an exception will be thrown when the message cannot be delivered (basic.return) and the message is marked as mandatory. PublisherAcknowledgement will also be activated in this case. See also publisher acknowledgements - When will messages be confirmed. | false | boolean
| *immediate* (producer) | This flag tells the server how to react if the message cannot be routed to a queue consumer immediately. If this flag is set, the server will return an undeliverable message with a Return method. If this flag is zero, the server will queue the message, but with no guarantee that it will ever be consumed. If the header is present rabbitmq.IMMEDIATE it will override this option. | false | boolean
| *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
| *mandatory* (producer) | This flag tells the server how to react if the message cannot be routed to a queue. If this flag is set, the server will return an unroutable message with a Return method. If this flag is zero, the server silently drops the message. If the header is present rabbitmq.MANDATORY it will override this option. | false | boolean
| *publisherAcknowledgements* (producer) | When true, the message will be published with publisher acknowledgements turned on | false | boolean
| *publisherAcknowledgements Timeout* (producer) | The amount of time in milliseconds to wait for a basic.ack response from RabbitMQ server |  | long
| *args* (advanced) | Specify arguments for configuring the different RabbitMQ concepts, a different prefix is required for each: Exchange: arg.exchange. Queue: arg.queue. Binding: arg.binding. DLQ: arg.dlq.queue. DLQ Binding: arg.dlq.binding. For example to declare a queue with message ttl argument: \http://localhost:5672/exchange/queueargs=arg.queue.x-message-ttl=60000 |  | Map
| *autoDetectConnectionFactory* (advanced) | Whether to auto-detect looking up RabbitMQ connection factory from the registry. When enabled and a single instance of the connection factory is found then it will be used. An explicit connection factory can be configured on the component or endpoint level which takes precedence. | true | boolean
| *automaticRecoveryEnabled* (advanced) | Enables connection automatic recovery (uses connection implementation that performs automatic recovery when connection shutdown is not initiated by the application) |  | Boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *clientProperties* (advanced) | Connection client properties (client info used in negotiating with the server) |  | Map
| *connectionFactoryException Handler* (advanced) | Custom rabbitmq ExceptionHandler for ConnectionFactory |  | ExceptionHandler
| *connectionTimeout* (advanced) | Connection timeout | 60000 | int
| *networkRecoveryInterval* (advanced) | Network recovery interval in milliseconds (interval used when recovering from network failure) | 5000 | Integer
| *requestedChannelMax* (advanced) | Connection requested channel max (max number of channels offered) | 2047 | int
| *requestedFrameMax* (advanced) | Connection requested frame max (max size of frame offered) | 0 | int
| *requestedHeartbeat* (advanced) | Connection requested heartbeat (heart-beat in seconds offered) | 60 | int
| *requestTimeout* (advanced) | Set timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds) | 20000 | long
| *requestTimeoutCheckerInterval* (advanced) | Set requestTimeoutCheckerInterval for inOut exchange | 1000 | long
| *topologyRecoveryEnabled* (advanced) | Enables connection topology recovery (should topology recovery be performed) |  | Boolean
| *transferException* (advanced) | When true and an inOut Exchange failed on the consumer side send the caused Exception back in the response | false | boolean
| *password* (security) | Password for authenticated access | guest | String
| *sslProtocol* (security) | Enables SSL on connection, accepted value are true, TLS and 'SSLv3 |  | String
| *trustManager* (security) | Configure SSL trust manager, SSL should be enabled for this option to be effective |  | TrustManager
| *username* (security) | Username in case of authenticated access | guest | String
|===
// component options: END


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

----
rabbitmq:exchangeName
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *exchangeName* | *Required* The exchange name determines the exchange to which the produced messages will be sent to. In the case of consumers, the exchange name determines the exchange the queue will be bound to. |  | String
|===


=== Query Parameters (64 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *addresses* (common) | If this option is set, camel-rabbitmq will try to create connection based on the setting of option addresses. The addresses value is a string which looks like server1:12345, server2:12345 |  | String
| *autoDelete* (common) | If it is true, the exchange will be deleted when it is no longer in use | true | boolean
| *automaticRecoveryEnabled* (common) | Enables connection automatic recovery (uses connection implementation that performs automatic recovery when existing connection has failures) | true | Boolean
| *connectionFactory* (common) | To use a custom RabbitMQ connection factory. When this option is set, all connection options (connectionTimeout, requestedChannelMax...) set on URI are not used |  | ConnectionFactory
| *deadLetterExchange* (common) | The name of the dead letter exchange |  | String
| *deadLetterExchangeType* (common) | The type of the dead letter exchange. The value can be one of: direct, fanout, headers, topic | direct | String
| *deadLetterQueue* (common) | The name of the dead letter queue |  | String
| *deadLetterRoutingKey* (common) | The routing key for the dead letter exchange |  | String
| *declare* (common) | If the option is true, camel declare the exchange and queue name and bind them together. If the option is false, camel won't declare the exchange and queue name on the server. | true | boolean
| *durable* (common) | If we are declaring a durable exchange (the exchange will survive a server restart) | true | boolean
| *exchangeType* (common) | The exchange type such as direct or topic. The value can be one of: direct, fanout, headers, topic | direct | String
| *exclusive* (common) | Exclusive queues may only be accessed by the current connection, and are deleted when that connection closes. | false | boolean
| *hostname* (common) | The hostname of the running rabbitmq instance or cluster. |  | String
| *passive* (common) | Passive queues depend on the queue already to be available at RabbitMQ. | false | boolean
| *portNumber* (common) | Port number for the host with the running rabbitmq instance or cluster. Default value is 5672. |  | int
| *queue* (common) | The queue to receive messages from |  | String
| *routingKey* (common) | The routing key to use when binding a consumer queue to the exchange. For producer routing keys, you set the header rabbitmq.ROUTING_KEY. |  | String
| *skipDlqDeclare* (common) | If true the producer will not declare and bind a dead letter queue. This can be used if you have also DLQ rabbitmq consumer and you want to avoid argument clashing between Producer and Consumer. This option have no effect, if DLQ configured (deadLetterExchange option is not set). | false | boolean
| *skipExchangeDeclare* (common) | This can be used if we need to declare the queue but not the exchange | false | boolean
| *skipQueueBind* (common) | If true the queue will not be bound to the exchange after declaring it | false | boolean
| *skipQueueDeclare* (common) | If true the producer will not declare and bind a queue. This can be used for directing messages via an existing routing key. | false | boolean
| *vhost* (common) | The vhost for the channel | / | String
| *autoAck* (consumer) | If messages should be auto acknowledged | true | boolean
| *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
| *concurrentConsumers* (consumer) | Number of concurrent consumers when consuming from broker. (eg similar as to the same option for the JMS component). | 1 | int
| *consumerTag* (consumer) | Specify a client-generated consumer tag to establish context when invoking the consume operation |  | String
| *exclusiveConsumer* (consumer) | Request exclusive access to the queue (meaning only this consumer can access the queue). This is useful when you want a long-lived shared queue to be temporarily accessible by just one consumer. | false | boolean
| *prefetchCount* (consumer) | The maximum number of messages that the server will deliver, 0 if unlimited. You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time |  | int
| *prefetchEnabled* (consumer) | Enables the quality of service on the RabbitMQConsumer side. You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time | false | boolean
| *prefetchGlobal* (consumer) | If the settings should be applied to the entire channel rather than each consumer You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time | false | boolean
| *prefetchSize* (consumer) | The maximum amount of content (measured in octets) that the server will deliver, 0 if unlimited. You need to specify the option of prefetchSize, prefetchCount, prefetchGlobal at the same time |  | int
| *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
| *threadPoolSize* (consumer) | The consumer uses a Thread Pool Executor with a fixed number of threads. This setting allows you to set that number of threads. | 10 | int
| *allowCustomHeaders* (producer) | Allow pass custom values to header | false | boolean
| *allowNullHeaders* (producer) | Allow pass null values to header | false | boolean
| *bridgeEndpoint* (producer) | If the bridgeEndpoint is true, the producer will ignore the message header of rabbitmq.EXCHANGE_NAME and rabbitmq.ROUTING_KEY | false | boolean
| *channelPoolMaxSize* (producer) | Get maximum number of opened channel in pool | 10 | int
| *channelPoolMaxWait* (producer) | Set the maximum number of milliseconds to wait for a channel from the pool | 1000 | long
| *guaranteedDeliveries* (producer) | When true, an exception will be thrown when the message cannot be delivered (basic.return) and the message is marked as mandatory. PublisherAcknowledgement will also be activated in this case. See also publisher acknowledgements - When will messages be confirmed. | false | boolean
| *immediate* (producer) | This flag tells the server how to react if the message cannot be routed to a queue consumer immediately. If this flag is set, the server will return an undeliverable message with a Return method. If this flag is zero, the server will queue the message, but with no guarantee that it will ever be consumed. If the header is present rabbitmq.IMMEDIATE it will override this option. | false | boolean
| *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
| *mandatory* (producer) | This flag tells the server how to react if the message cannot be routed to a queue. If this flag is set, the server will return an unroutable message with a Return method. If this flag is zero, the server silently drops the message. If the header is present rabbitmq.MANDATORY it will override this option. | false | boolean
| *publisherAcknowledgements* (producer) | When true, the message will be published with publisher acknowledgements turned on | false | boolean
| *publisherAcknowledgements Timeout* (producer) | The amount of time in milliseconds to wait for a basic.ack response from RabbitMQ server |  | long
| *args* (advanced) | Specify arguments for configuring the different RabbitMQ concepts, a different prefix is required for each: Exchange: arg.exchange. Queue: arg.queue. Binding: arg.binding. DLQ: arg.dlq.queue. DLQ binding: arg.dlq.binding. For example to declare a queue with message ttl argument: \http://localhost:5672/exchange/queueargs=arg.queue.x-message-ttl=60000 |  | Map
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *clientProperties* (advanced) | Connection client properties (client info used in negotiating with the server) |  | Map
| *connectionFactoryException Handler* (advanced) | Custom rabbitmq ExceptionHandler for ConnectionFactory |  | ExceptionHandler
| *connectionTimeout* (advanced) | Connection timeout | 60000 | int
| *networkRecoveryInterval* (advanced) | Network recovery interval in milliseconds (interval used when recovering from network failure) | 5000 | Integer
| *requestedChannelMax* (advanced) | Connection requested channel max (max number of channels offered) | 2047 | int
| *requestedFrameMax* (advanced) | Connection requested frame max (max size of frame offered) | 0 | int
| *requestedHeartbeat* (advanced) | Connection requested heartbeat (heart-beat in seconds offered) | 60 | int
| *requestTimeout* (advanced) | Set timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds) | 20000 | long
| *requestTimeoutCheckerInterval* (advanced) | Set requestTimeoutCheckerInterval for inOut exchange | 1000 | long
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *topologyRecoveryEnabled* (advanced) | Enables connection topology recovery (should topology recovery be performed) |  | Boolean
| *transferException* (advanced) | When true and an inOut Exchange failed on the consumer side send the caused Exception back in the response | false | boolean
| *allowMessageBodySerialization* (allowMessageBodySerialization) | Whether to allow Java serialization of the message body or not. If this value is true, the message body will be serialized on the producer side using Java serialization, if no type converter can handle the message body. On the consumer side, it will deserialize the message body if this value is true and the message contains a CamelSerialize header. Setting this value to true may introduce a security vulnerability as it allows an attacker to attempt to deserialize to a gadget object which could result in a RCE or other security vulnerability. | false | boolean
| *password* (security) | Password for authenticated access | guest | String
| *sslProtocol* (security) | Enables SSL on connection, accepted value are true, TLS and 'SSLv3 |  | String
| *trustManager* (security) | Configure SSL trust manager, SSL should be enabled for this option to be effective |  | TrustManager
| *username* (security) | Username in case of authenticated access | guest | String
|===
// endpoint options: END



See
https://rabbitmq.github.io/rabbitmq-java-client/api/current/com/rabbitmq/client/ConnectionFactory.html[https://rabbitmq.github.io/rabbitmq-java-client/api/current/com/rabbitmq/client/ConnectionFactory.html]
and the AMQP specification for more information on connection options.

== Using a connection factory

To connect to RabbitMQ you can setup a `ConnectionFactory` (same as with JMS) with the login details such as:

[source,xml]
----
<bean id="rabbitConnectionFactory" class="com.rabbitmq.client.ConnectionFactory">
  <property name="host" value="localhost"/>
  <property name="port" value="5672"/>
  <property name="username" value="camel"/>
  <property name="password" value="bugsbunny"/>
</bean>
----

And then refer to the connection factory in the endpoint uri as shown below:

[source,xml]
----
<camelContext>
  <route>
    <from uri="direct:rabbitMQEx2"/>
    <to uri="rabbitmq:ex2?connectionFactory=#rabbitConnectionFactory"/>
  </route>
</camelContext>
----

The `ConnectionFactory` is auto-detected by default, so you can just do

[source,xml]
----
<camelContext>
  <route>
    <from uri="direct:rabbitMQEx2"/>
    <to uri="rabbitmq:ex2"/>
  </route>
</camelContext>
----

In case you have multiple connection factories in your application or multiple connection factories in your registry, don't forget to set the `autoDetectConnectionFactory` to false.

== Message Headers

The following headers are set on exchanges when consuming messages.

[width="100%",cols="10%,90%",options="header",]
|===
|Property |Value

|`rabbitmq.ROUTING_KEY` |The routing key that was used to receive the message, or the routing key
that will be used when producing a message

|`rabbitmq.EXCHANGE_NAME` |The exchange the message was received from

|`rabbitmq.DELIVERY_TAG` |The rabbitmq delivery tag of the received message

|`rabbitmq.REDELIVERY_TAG` |Whether the message is a redelivered

|`rabbitmq.REQUEUE` |This is used by the consumer to control rejection of the
message. When the consumer is complete processing the exchange, and if
the exchange failed, then the consumer is going to reject the message
from the RabbitMQ broker. The value of this header controls this
behavior. If the value is false (by default) then the message is
discarded/dead-lettered. If the value is true, then the message is
re-queued. 
|===

The following headers are used by the producer. If these are set on the
camel exchange then they will be set on the RabbitMQ message.

[width="100%",cols="10%,90%",options="header",]
|===
|Property |Value

|`rabbitmq.ROUTING_KEY` |The routing key that will be used when sending the message

|`rabbitmq.EXCHANGE_NAME` |The exchange the message was received from

|`rabbitmq.EXCHANGE_OVERRIDE_NAME` |Used for force sending the message to this exchange instead of the endpoint configured name on the producer

|`rabbitmq.CONTENT_TYPE` |The contentType to set on the RabbitMQ message

|`rabbitmq.PRIORITY` |The priority header to set on the RabbitMQ message

|`rabbitmq.CORRELATIONID` |The correlationId to set on the RabbitMQ message

|`rabbitmq.MESSAGE_ID` |The message id to set on the RabbitMQ message

|`rabbitmq.DELIVERY_MODE` |If the message should be persistent or not

|`rabbitmq.USERID` |The userId to set on the RabbitMQ message

|`rabbitmq.CLUSTERID` |The clusterId to set on the RabbitMQ message

|`rabbitmq.REPLY_TO` |The replyTo to set on the RabbitMQ message

|`rabbitmq.CONTENT_ENCODING` |The contentEncoding to set on the RabbitMQ message

|`rabbitmq.TYPE` |The type to set on the RabbitMQ message

|`rabbitmq.EXPIRATION` |The expiration to set on the RabbitMQ message

|`rabbitmq.TIMESTAMP` |The timestamp to set on the RabbitMQ message

|`rabbitmq.APP_ID` |The appId to set on the RabbitMQ message
|===

Headers are set by the consumer once the message is received. The
producer will also set the headers for downstream processors once the
exchange has taken place.

== Troubleshooting headers

Watch out when consuming from a RabbitMq queue and producing to *the same* RabbitMq exchange. The header details on the exchange may be populated with headers that will not be overriden by the destination endpoint. The following example will help understand the pitfall.

[source,java]
----
from("rabbitmq:A?queue=IN&declare=false&autoDelete=false&arg.queue.x-message-ttl=20000")
  // ... your route
  .to("rabbitmq:A?queue=OUT&routingKey=OUT&declare=false&autoDelete=false&arg.queue.x-message-ttl=20000");
----

You would think that it would be a straight forward operation. However, if the source queue has a routing key set in the headers, it will pass down to the destination and not be overriden with the URI query parameters. Because the exchange is the same and the routing key is the same, an infinitely growing loop is created.

Either make a second exchange for the producer to avoid the headers to pass through or manually access the exchange headers in a processor and get rid of the misbehaving key. (Example is written in Kotlin)

[source,kotlin]
----
from("rabbitmq:A?queue=IN&declare=false&autoDelete=false&arg.queue.x-message-ttl=20000")
  // ...
  .process(Processor { exchange: Exchange ->
    val input = exchange.`in`.body as InputModel
    exchange.`in`.removeHeader("rabbitmq.ROUTING_KEY")
    exchange.`in`.body = OutputModel(...)
  })
  // ...
  .to("rabbitmq:A?queue=OUT&routingKey=OUT&declare=false&autoDelete=false&arg.queue.x-message-ttl=20000");
----

Now you are at least guaranteed to not create a loop from the camel route.

== Allowing custom Headers

The `allowCustomHeaders` endpoint option can be used to avoid adding custom headers to the message sent to RabbitMQ.
If set to false, the user will have only rabbitmq.* headers in the payload of the message. Default value for this option is true.

[NOTE]
====
If you decide to use the allowCustomHeaders option, don't add sensitive information as header. It's not recommended and it's dangerous. Don't do it.
====

== Message Body

The component will use the camel exchange in body as the rabbit mq
message body. The camel exchange in object must be convertible to a byte
array. Otherwise the producer will throw an exception of unsupported
body type.

== Samples

To receive messages from a queue that is bound to an exchange A with the
routing key B,

[source,java]
----
from("rabbitmq:A?routingKey=B")
  .to("log:cheese");
----

To receive messages from a queue with a single thread with auto
acknowledge disabled.

[source,java]
----
from("rabbitmq:A?routingKey=B&threadPoolSize=1&autoAck=false")
  .to("log:cheese");
----

To send messages to an exchange called C

[source,java]
----
from("direct:foo")
  .to("rabbitmq:C");
----

Declaring a headers exchange and queue

[source,java]
----
from("rabbitmq:ex?exchangeType=headers&queue=q&bindingArgs=#bindArgs")
  .to("log:cheese");
----

and place corresponding `Map<String, Object>` with the id of "bindArgs" in the Registry.

For example declaring a method in Spring

[source,java]
----
@Bean(name = "bindArgs")
public Map<String, Object> bindArgsBuilder() {
    return new HashMap<String, Object>() {{
        put("binding.foo", "bar");
    }};
}
----


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