You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/01/11 16:10:35 UTC

[camel] 02/02: CAMEL-16003: camel-spring-rabbitmq - New component using spring client

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch rabbitmq
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4659abc27e3b0227f95ccaa0a6fcc1fb911a0134
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 11 17:09:52 2021 +0100

    CAMEL-16003: camel-spring-rabbitmq - New component using spring client
---
 .../catalog/docs/spring-rabbitmq-component.adoc    |    3 +-
 components/camel-spring-rabbitmq/pom.xml           |   24 -
 .../springrabbit/RabbitMQEndpointConfigurer.java   |    6 +
 .../springrabbit/RabbitMQEndpointUriFactory.java   |    3 +-
 .../component/springrabbit/spring-rabbitmq.json    |    1 +
 .../src/main/docs/spring-rabbitmq-component.adoc   |    3 +-
 .../springrabbit/EndpointMessageListener.java      |   74 +-
 .../component/springrabbit/RabbitMQConsumer.java   |    1 +
 .../component/springrabbit/RabbitMQEndpoint.java   |   19 +-
 .../component/springrabbit/RabbitMQProducer.java   |   81 +-
 .../integration/RabbitMQInOutIntTest.java          |   56 +
 .../dsl/RabbitMQEndpointBuilderFactory.java        | 4390 +++-----------------
 .../ROOT/pages/spring-rabbitmq-component.adoc      |    3 +-
 13 files changed, 904 insertions(+), 3760 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/spring-rabbitmq-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/spring-rabbitmq-component.adoc
index 619f32a..75ee636 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/spring-rabbitmq-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/spring-rabbitmq-component.adoc
@@ -87,13 +87,14 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (21 parameters):
+=== Query Parameters (22 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
+| *disableReplyTo* (common) | Specifies whether Camel ignores the ReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the ReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message brokers and  [...]
 | *routingKey* (common) | Routing key. |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the consumer processes the Exchange asynchronously. If enabled then the consumer may pickup the next message from the queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the consumer will pickup the next message from the queue. | false | boolean
diff --git a/components/camel-spring-rabbitmq/pom.xml b/components/camel-spring-rabbitmq/pom.xml
index 7948560..665df4b 100644
--- a/components/camel-spring-rabbitmq/pom.xml
+++ b/components/camel-spring-rabbitmq/pom.xml
@@ -188,29 +188,5 @@
                 </plugins>
             </build>
         </profile>
-
-        <profile>
-            <id>qpid-itest</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <skipTests>${skipTests}</skipTests>
-                            <argLine>-Drabbitmq.instance.type=qpid</argLine>
-                            <excludes>
-                                <exclude>**/*IntTest</exclude>
-                            </excludes>
-                            <includes>
-                                <include>**/*QpidTest</include>
-                            </includes>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
     </profiles>
 </project>
diff --git a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointConfigurer.java b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointConfigurer.java
index d2b8438..c3c872c 100644
--- a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointConfigurer.java
+++ b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointConfigurer.java
@@ -40,6 +40,8 @@ public class RabbitMQEndpointConfigurer extends PropertyConfigurerSupport implem
         case "deadLetterQueue": target.setDeadLetterQueue(property(camelContext, java.lang.String.class, value)); return true;
         case "deadletterroutingkey":
         case "deadLetterRoutingKey": target.setDeadLetterRoutingKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "disablereplyto":
+        case "disableReplyTo": target.setDisableReplyTo(property(camelContext, boolean.class, value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
@@ -85,6 +87,8 @@ public class RabbitMQEndpointConfigurer extends PropertyConfigurerSupport implem
         case "deadLetterQueue": return java.lang.String.class;
         case "deadletterroutingkey":
         case "deadLetterRoutingKey": return java.lang.String.class;
+        case "disablereplyto":
+        case "disableReplyTo": return boolean.class;
         case "exceptionhandler":
         case "exceptionHandler": return org.apache.camel.spi.ExceptionHandler.class;
         case "exchangepattern":
@@ -131,6 +135,8 @@ public class RabbitMQEndpointConfigurer extends PropertyConfigurerSupport implem
         case "deadLetterQueue": return target.getDeadLetterQueue();
         case "deadletterroutingkey":
         case "deadLetterRoutingKey": return target.getDeadLetterRoutingKey();
+        case "disablereplyto":
+        case "disableReplyTo": return target.isDisableReplyTo();
         case "exceptionhandler":
         case "exceptionHandler": return target.getExceptionHandler();
         case "exchangepattern":
diff --git a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointUriFactory.java b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointUriFactory.java
index 1dd449f..ff14ae6 100644
--- a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointUriFactory.java
+++ b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointUriFactory.java
@@ -20,7 +20,8 @@ public class RabbitMQEndpointUriFactory extends org.apache.camel.support.compone
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(22);
+        Set<String> props = new HashSet<>(23);
+        props.add("disableReplyTo");
         props.add("asyncConsumer");
         props.add("deadLetterExchange");
         props.add("synchronous");
diff --git a/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json b/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json
index 7c9f773..98ac6aa 100644
--- a/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json
+++ b/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json
@@ -40,6 +40,7 @@
   "properties": {
     "exchangeName": { "kind": "path", "displayName": "Exchange Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "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. Note: to use default exchange then do n [...]
     "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.springframework.amqp.rabbit.connection.ConnectionFactory", "deprecated": false, "autowired": false, "secret": false, "description": "The connection factory to be use. A connection factory must be configured either on the component or endpoint." },
+    "disableReplyTo": { "kind": "parameter", "displayName": "Disable Reply To", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether Camel ignores the ReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the ReplyTo header. You can use this option if you want Camel to consume from a rout [...]
     "routingKey": { "kind": "parameter", "displayName": "Routing Key", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Routing key." },
     "testConnectionOnStartup": { "kind": "parameter", "displayName": "Test Connection On Startup", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel [...]
     "asyncConsumer": { "kind": "parameter", "displayName": "Async Consumer", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the consumer processes the Exchange asynchronously. If enabled then the consumer may pickup the next message from the queue, while the previous message is being processed asynchronously (by the Asynchronous  [...]
diff --git a/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc b/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
index 619f32a..75ee636 100644
--- a/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
+++ b/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
@@ -87,13 +87,14 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (21 parameters):
+=== Query Parameters (22 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
+| *disableReplyTo* (common) | Specifies whether Camel ignores the ReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the ReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message brokers and  [...]
 | *routingKey* (common) | Routing key. |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the consumer processes the Exchange asynchronously. If enabled then the consumer may pickup the next message from the queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the consumer will pickup the next message from the queue. | false | boolean
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/EndpointMessageListener.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/EndpointMessageListener.java
index 44a0617..d14ae76 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/EndpointMessageListener.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/EndpointMessageListener.java
@@ -11,7 +11,10 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Address;
 import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
 
 import static org.apache.camel.RuntimeCamelException.wrapRuntimeCamelException;
@@ -22,6 +25,7 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
 
     private final RabbitMQEndpoint endpoint;
     private final AsyncProcessor processor;
+    private RabbitTemplate template;
     private boolean disableReplyTo;
     private boolean async;
 
@@ -44,20 +48,37 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
         this.async = async;
     }
 
+    public boolean isDisableReplyTo() {
+        return disableReplyTo;
+    }
+
+    public void setDisableReplyTo(boolean disableReplyTo) {
+        this.disableReplyTo = disableReplyTo;
+    }
+
+    public synchronized RabbitTemplate getTemplate() {
+        if (template == null) {
+            template = endpoint.createInOnlyTemplate();
+        }
+        return template;
+    }
+
+    public void setTemplate(RabbitTemplate template) {
+        this.template = template;
+    }
+
     @Override
     public void onMessage(Message message, Channel channel) throws Exception {
         LOG.trace("onMessage START");
 
         LOG.debug("{} consumer received RabbitMQ message: {}", endpoint, message);
-        boolean sendReply;
         RuntimeCamelException rce;
         try {
-            Object replyDestination = null;
+            final Address replyDestination
+                    = message.getMessageProperties() != null ? message.getMessageProperties().getReplyToAddress() : null;
+            final boolean sendReply = !isDisableReplyTo() && replyDestination != null;
             final Exchange exchange = createExchange(message, channel, replyDestination);
 
-            // TODO: request/reply
-            sendReply = false;
-
             // process the exchange either asynchronously or synchronous
             LOG.trace("onMessage.process START");
             AsyncCallback callback
@@ -133,10 +154,10 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
         private final Exchange exchange;
         private final RabbitMQEndpoint endpoint;
         private final boolean sendReply;
-        private final Object replyDestination;
+        private final Address replyDestination;
 
         private EndpointMessageListenerAsyncCallback(Message message, Exchange exchange, RabbitMQEndpoint endpoint,
-                                                     boolean sendReply, Object replyDestination) {
+                                                     boolean sendReply, Address replyDestination) {
             this.message = message;
             this.exchange = exchange;
             this.endpoint = endpoint;
@@ -154,7 +175,6 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
 
             // if we send back a reply it can either be the message body or transferring a caused exception
             org.apache.camel.Message body = null;
-            Exception cause = null;
             RuntimeCamelException rce = null;
 
             if (exchange.isFailed() || exchange.isRollbackOnly()) {
@@ -175,19 +195,17 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
                     } else {
                         body = exchange.getIn();
                     }
-                    cause = null;
                 }
             }
 
             // send back reply if there was no error and we are supposed to send back a reply
-            if (rce == null && sendReply && (body != null || cause != null)) {
+            if (rce == null && sendReply && body != null) {
                 LOG.trace("onMessage.sendReply START");
-                // TODO: reply
-                /*if (replyDestination instanceof Destination) {
-                    sendReply((Destination) replyDestination, message, exchange, body, cause);
-                } else {
-                    sendReply((String) replyDestination, message, exchange, body, cause);
-                }*/
+                try {
+                    sendReply(replyDestination, message, exchange, body);
+                } catch (Throwable e) {
+                    rce = new RuntimeCamelException(e);
+                }
                 LOG.trace("onMessage.sendReply END");
             }
 
@@ -205,6 +223,30 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
                 }
             }
         }
+
+        private void sendReply(Address replyDestination, Message message, Exchange exchange, org.apache.camel.Message out) {
+            if (replyDestination == null) {
+                LOG.debug("Cannot send reply message as there is no reply-to for: {}", out);
+                return;
+            }
+
+            String cid = message.getMessageProperties().getCorrelationId();
+            Object body = out.getBody();
+            Message msg;
+            if (body instanceof Message) {
+                msg = (Message) body;
+            } else {
+                MessageProperties mp = endpoint.getMessagePropertiesConverter().toMessageProperties(exchange);
+                mp.setCorrelationId(cid);
+                msg = endpoint.getMessageConverter().toMessage(body, mp);
+            }
+
+            // send reply back
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("{} sending reply message [correlationId:{}]: {}", endpoint, cid, msg);
+            }
+            getTemplate().send(replyDestination.getExchangeName(), replyDestination.getRoutingKey(), msg);
+        }
     }
 
 }
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQConsumer.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQConsumer.java
index 13d7267..37c3fbe 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQConsumer.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQConsumer.java
@@ -58,6 +58,7 @@ public class RabbitMQConsumer extends DefaultConsumer implements Suspendable {
         messageListener = new EndpointMessageListener(endpoint, processor);
         getEndpoint().configureMessageListener(messageListener);
         messageListener.setAsync(endpoint.isAsyncConsumer());
+        messageListener.setDisableReplyTo(endpoint.isDisableReplyTo());
     }
 
     /**
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQEndpoint.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQEndpoint.java
index ca9f4b2..89cad7c 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQEndpoint.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQEndpoint.java
@@ -39,6 +39,7 @@ import org.springframework.amqp.core.ExchangeBuilder;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.Queue;
 import org.springframework.amqp.core.QueueBuilder;
+import org.springframework.amqp.rabbit.AsyncRabbitTemplate;
 import org.springframework.amqp.rabbit.connection.ConnectionFactory;
 import org.springframework.amqp.rabbit.core.RabbitAdmin;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
@@ -122,6 +123,12 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
     @UriParam(label = "consumer", defaultValue = "direct", enums = "direct,fanout,headers,topic",
               description = "The type of the dead letter exchange")
     private String deadLetterExchangeType = "direct";
+    @UriParam(description = "Specifies whether Camel ignores the ReplyTo header in messages. If true, Camel does not send a reply back to"
+                            + " the destination specified in the ReplyTo header. You can use this option if you want Camel to consume from a"
+                            + " route and you do not want Camel to automatically send back a reply message because another component in your code"
+                            + " handles the reply message. You can also use this option if you want to use Camel as a proxy between different"
+                            + " message brokers and you want to route message from one system to another.")
+    private boolean disableReplyTo;
 
     public RabbitMQEndpoint(String endpointUri, Component component, String exchangeName) {
         super(endpointUri, component);
@@ -265,6 +272,14 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
         this.deadLetterExchangeType = deadLetterExchangeType;
     }
 
+    public boolean isDisableReplyTo() {
+        return disableReplyTo;
+    }
+
+    public void setDisableReplyTo(boolean disableReplyTo) {
+        this.disableReplyTo = disableReplyTo;
+    }
+
     @Override
     public Consumer createConsumer(Processor processor) throws Exception {
         DefaultMessageListenerContainer listenerContainer = createMessageListenerContainer();
@@ -329,10 +344,10 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
     /**
      * Factory method for creating a new template for InOut message exchanges
      */
-    public RabbitTemplate createInOutTemplate() {
+    public AsyncRabbitTemplate createInOutTemplate() {
         RabbitTemplate template = new RabbitTemplate(getConnectionFactory());
         template.setRoutingKey(getRoutingKey());
-        return template;
+        return new AsyncRabbitTemplate(template);
     }
 
     public DefaultMessageListenerContainer createMessageListenerContainer() throws Exception {
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQProducer.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQProducer.java
index 45d4a42..ea8e894 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQProducer.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQProducer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.springrabbit;
 
+import java.util.Map;
 import java.util.concurrent.RejectedExecutionException;
 
 import org.apache.camel.AsyncCallback;
@@ -27,16 +28,18 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.AsyncRabbitTemplate;
 import org.springframework.amqp.rabbit.connection.Connection;
 import org.springframework.amqp.rabbit.connection.RabbitUtils;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.util.concurrent.ListenableFutureCallback;
 
 public class RabbitMQProducer extends DefaultAsyncProducer {
 
     private static final Logger LOG = LoggerFactory.getLogger(RabbitMQProducer.class);
 
     private RabbitTemplate inOnlyTemplate;
-    private RabbitTemplate inOutTemplate;
+    private AsyncRabbitTemplate inOutTemplate;
 
     public RabbitMQProducer(Endpoint endpoint) {
         super(endpoint);
@@ -58,14 +61,15 @@ public class RabbitMQProducer extends DefaultAsyncProducer {
         this.inOnlyTemplate = inOnlyTemplate;
     }
 
-    public RabbitTemplate getInOutTemplate() {
+    public AsyncRabbitTemplate getInOutTemplate() {
         if (inOutTemplate == null) {
             inOutTemplate = getEndpoint().createInOutTemplate();
         }
+        inOutTemplate.start();
         return inOutTemplate;
     }
 
-    public void setInOutTemplate(RabbitTemplate inOutTemplate) {
+    public void setInOutTemplate(AsyncRabbitTemplate inOutTemplate) {
         this.inOutTemplate = inOutTemplate;
     }
 
@@ -103,15 +107,13 @@ public class RabbitMQProducer extends DefaultAsyncProducer {
         }
 
         try {
-            // TODO: request/reply
-            /*
             if (!getEndpoint().isDisableReplyTo() && exchange.getPattern().isOutCapable()) {
                 // in out requires a bit more work than in only
                 return processInOut(exchange, callback);
-            } else {*/
-            // in only
-            return processInOnly(exchange, callback);
-            //}
+            } else {
+                // in only
+                return processInOnly(exchange, callback);
+            }
         } catch (Throwable e) {
             // must catch exception to ensure callback is invoked as expected
             // to let Camel error handling deal with this
@@ -121,6 +123,67 @@ public class RabbitMQProducer extends DefaultAsyncProducer {
         }
     }
 
+    protected boolean processInOut(Exchange exchange, AsyncCallback callback) {
+        // header take precedence over endpoint
+        String exchangeName = (String) exchange.getMessage().removeHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
+        if (exchangeName == null) {
+            exchangeName = getEndpoint().getExchangeName();
+        }
+        exchangeName = RabbitMQHelper.isDefaultExchange(exchangeName) ? "" : exchangeName;
+
+        String routingKey = (String) exchange.getMessage().removeHeader(RabbitMQConstants.ROUTING_OVERRIDE_KEY);
+        if (routingKey == null) {
+            routingKey = getEndpoint().getRoutingKey();
+        }
+
+        Object body = exchange.getMessage().getBody();
+        Message msg;
+        if (body instanceof Message) {
+            msg = (Message) body;
+        } else {
+            MessageProperties mp = getEndpoint().getMessagePropertiesConverter().toMessageProperties(exchange);
+            msg = getEndpoint().getMessageConverter().toMessage(body, mp);
+        }
+
+        try {
+            // will use RabbitMQ direct reply-to
+            AsyncRabbitTemplate.RabbitMessageFuture future = getInOutTemplate().sendAndReceive(exchangeName, routingKey, msg);
+            future.addCallback(new ListenableFutureCallback<Message>() {
+                @Override
+                public void onFailure(Throwable throwable) {
+                    exchange.setException(throwable);
+                    callback.done(false);
+                }
+
+                @Override
+                public void onSuccess(Message message) {
+                    try {
+                        Object body = getEndpoint().getMessageConverter().fromMessage(message);
+                        exchange.getMessage().setBody(body);
+                        Map<String, Object> headers
+                                = getEndpoint().getMessagePropertiesConverter()
+                                        .fromMessageProperties(message.getMessageProperties(), exchange);
+                        if (!headers.isEmpty()) {
+                            exchange.getMessage().getHeaders().putAll(headers);
+                        }
+                    } catch (Throwable e) {
+                        exchange.setException(e);
+                    } finally {
+                        callback.done(false);
+                    }
+                }
+            });
+
+            return false;
+
+        } catch (Exception e) {
+            exchange.setException(e);
+        }
+
+        callback.done(true);
+        return true;
+    }
+
     protected boolean processInOnly(Exchange exchange, AsyncCallback callback) {
         // header take precedence over endpoint
         String exchangeName = (String) exchange.getMessage().removeHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
diff --git a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQInOutIntTest.java b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQInOutIntTest.java
new file mode 100644
index 0000000..0aa3000c
--- /dev/null
+++ b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQInOutIntTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.springrabbit.integration;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class RabbitMQInOutIntTest extends AbstractRabbitMQIntTest {
+
+    @Test
+    public void testInOut() throws Exception {
+        getMockEndpoint("mock:input").expectedBodiesReceived("World");
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+        template.requestBody("direct:start", "World");
+
+        assertMockEndpointsSatisfied(30, TimeUnit.SECONDS);
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("log:request")
+                        .to(ExchangePattern.InOut, "spring-rabbitmq:cheese?routingKey=foo.bar")
+                        .to("log:response")
+                        .to("mock:result");
+
+                from("spring-rabbitmq:cheese?queues=myqueue&routingKey=foo.bar")
+                        .to("log:input")
+                        .to("mock:input")
+                        .transform(body().prepend("Hello "));
+            }
+        };
+    }
+}
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RabbitMQEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RabbitMQEndpointBuilderFactory.java
index fad835e..f27a334 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RabbitMQEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RabbitMQEndpointBuilderFactory.java
@@ -25,7 +25,7 @@ import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
- * Send and receive messages from RabbitMQ instances.
+ * Send and receive messages from RabbitMQ using Spring RabbitMQ client.
  * 
  * Generated by camel build tools - do NOT edit this file!
  */
@@ -34,7 +34,7 @@ public interface RabbitMQEndpointBuilderFactory {
 
 
     /**
-     * Builder for endpoint consumers for the RabbitMQ component.
+     * Builder for endpoint consumers for the Spring RabbitMQ component.
      */
     public interface RabbitMQEndpointConsumerBuilder
             extends
@@ -43,98 +43,11 @@ public interface RabbitMQEndpointBuilderFactory {
             return (AdvancedRabbitMQEndpointConsumerBuilder) this;
         }
         /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param addresses the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder addresses(String addresses) {
-            doSetProperty("addresses", addresses);
-            return this;
-        }
-        /**
-         * If it is true, the exchange will be deleted when it is no longer in
-         * use.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param autoDelete the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder autoDelete(boolean autoDelete) {
-            doSetProperty("autoDelete", autoDelete);
-            return this;
-        }
-        /**
-         * If it is true, the exchange will be deleted when it is no longer in
-         * use.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param autoDelete the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder autoDelete(String autoDelete) {
-            doSetProperty("autoDelete", autoDelete);
-            return this;
-        }
-        /**
-         * Enables connection automatic recovery (uses connection implementation
-         * that performs automatic recovery when existing connection has
-         * failures).
-         * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param automaticRecoveryEnabled the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder automaticRecoveryEnabled(
-                Boolean automaticRecoveryEnabled) {
-            doSetProperty("automaticRecoveryEnabled", automaticRecoveryEnabled);
-            return this;
-        }
-        /**
-         * Enables connection automatic recovery (uses connection implementation
-         * that performs automatic recovery when existing connection has
-         * failures).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param automaticRecoveryEnabled the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder automaticRecoveryEnabled(
-                String automaticRecoveryEnabled) {
-            doSetProperty("automaticRecoveryEnabled", automaticRecoveryEnabled);
-            return this;
-        }
-        /**
-         * To use a custom RabbitMQ connection factory. When this option is set,
-         * all connection options (connectionTimeout, requestedChannelMax...)
-         * set on URI are not used.
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
          * The option is a:
-         * &lt;code&gt;com.rabbitmq.client.ConnectionFactory&lt;/code&gt; type.
+         * &lt;code&gt;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
          * 
          * Group: common
          * 
@@ -147,12 +60,11 @@ public interface RabbitMQEndpointBuilderFactory {
             return this;
         }
         /**
-         * To use a custom RabbitMQ connection factory. When this option is set,
-         * all connection options (connectionTimeout, requestedChannelMax...)
-         * set on URI are not used.
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
          * The option will be converted to a
-         * &lt;code&gt;com.rabbitmq.client.ConnectionFactory&lt;/code&gt; type.
+         * &lt;code&gt;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
          * 
          * Group: common
          * 
@@ -165,215 +77,37 @@ public interface RabbitMQEndpointBuilderFactory {
             return this;
         }
         /**
-         * The name of the dead letter exchange.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param deadLetterExchange the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder deadLetterExchange(
-                String deadLetterExchange) {
-            doSetProperty("deadLetterExchange", deadLetterExchange);
-            return this;
-        }
-        /**
-         * The type of the dead letter exchange.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: direct
-         * Group: common
-         * 
-         * @param deadLetterExchangeType the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder deadLetterExchangeType(
-                String deadLetterExchangeType) {
-            doSetProperty("deadLetterExchangeType", deadLetterExchangeType);
-            return this;
-        }
-        /**
-         * The name of the dead letter queue.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param deadLetterQueue the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder deadLetterQueue(
-                String deadLetterQueue) {
-            doSetProperty("deadLetterQueue", deadLetterQueue);
-            return this;
-        }
-        /**
-         * The routing key for the dead letter exchange.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param deadLetterRoutingKey the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder deadLetterRoutingKey(
-                String deadLetterRoutingKey) {
-            doSetProperty("deadLetterRoutingKey", deadLetterRoutingKey);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param declare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder declare(boolean declare) {
-            doSetProperty("declare", declare);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param declare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder declare(String declare) {
-            doSetProperty("declare", declare);
-            return this;
-        }
-        /**
-         * If we are declaring a durable exchange (the exchange will survive a
-         * server restart).
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param durable the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder durable(boolean durable) {
-            doSetProperty("durable", durable);
-            return this;
-        }
-        /**
-         * If we are declaring a durable exchange (the exchange will survive a
-         * server restart).
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param durable the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder durable(String durable) {
-            doSetProperty("durable", durable);
-            return this;
-        }
-        /**
-         * The exchange type such as direct or topic.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: direct
-         * Group: common
-         * 
-         * @param exchangeType the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder exchangeType(String exchangeType) {
-            doSetProperty("exchangeType", exchangeType);
-            return this;
-        }
-        /**
-         * Exclusive queues may only be accessed by the current connection, and
-         * are deleted when that connection closes.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param exclusive the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder exclusive(boolean exclusive) {
-            doSetProperty("exclusive", exclusive);
-            return this;
-        }
-        /**
-         * Exclusive queues may only be accessed by the current connection, and
-         * are deleted when that connection closes.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param exclusive the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder exclusive(String exclusive) {
-            doSetProperty("exclusive", exclusive);
-            return this;
-        }
-        /**
-         * The hostname of the running rabbitmq instance or cluster.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param hostname the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder hostname(String hostname) {
-            doSetProperty("hostname", hostname);
-            return this;
-        }
-        /**
-         * Passive queues depend on the queue already to be available at
-         * RabbitMQ.
+         * Specifies whether Camel ignores the ReplyTo header in messages. If
+         * true, Camel does not send a reply back to the destination specified
+         * in the ReplyTo header. You can use this option if you want Camel to
+         * consume from a route and you do not want Camel to automatically send
+         * back a reply message because another component in your code handles
+         * the reply message. You can also use this option if you want to use
+         * Camel as a proxy between different message brokers and you want to
+         * route message from one system to another.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
          * Group: common
          * 
-         * @param passive the value to set
+         * @param disableReplyTo the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointConsumerBuilder passive(boolean passive) {
-            doSetProperty("passive", passive);
+        default RabbitMQEndpointConsumerBuilder disableReplyTo(
+                boolean disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
         /**
-         * Passive queues depend on the queue already to be available at
-         * RabbitMQ.
+         * Specifies whether Camel ignores the ReplyTo header in messages. If
+         * true, Camel does not send a reply back to the destination specified
+         * in the ReplyTo header. You can use this option if you want Camel to
+         * consume from a route and you do not want Camel to automatically send
+         * back a reply message because another component in your code handles
+         * the reply message. You can also use this option if you want to use
+         * Camel as a proxy between different message brokers and you want to
+         * route message from one system to another.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -381,60 +115,16 @@ public interface RabbitMQEndpointBuilderFactory {
          * Default: false
          * Group: common
          * 
-         * @param passive the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder passive(String passive) {
-            doSetProperty("passive", passive);
-            return this;
-        }
-        /**
-         * Port number for the host with the running rabbitmq instance or
-         * cluster. Default value is 5672.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param portNumber the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder portNumber(int portNumber) {
-            doSetProperty("portNumber", portNumber);
-            return this;
-        }
-        /**
-         * Port number for the host with the running rabbitmq instance or
-         * cluster. Default value is 5672.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param portNumber the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder portNumber(String portNumber) {
-            doSetProperty("portNumber", portNumber);
-            return this;
-        }
-        /**
-         * The queue to receive messages from.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param queue the value to set
+         * @param disableReplyTo the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointConsumerBuilder queue(String queue) {
-            doSetProperty("queue", queue);
+        default RabbitMQEndpointConsumerBuilder disableReplyTo(
+                String disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
         /**
-         * The routing key to use when binding a consumer queue to the exchange.
-         * For producer routing keys, you set the header rabbitmq.ROUTING_KEY.
+         * Routing key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
@@ -448,2969 +138,198 @@ public interface RabbitMQEndpointBuilderFactory {
             return this;
         }
         /**
-         * 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).
+         * Specifies whether to test the connection on startup. This ensures
+         * that when Camel starts that all the JMS consumers have a valid
+         * connection to the JMS broker. If a connection cannot be granted then
+         * Camel throws an exception on startup. This ensures that Camel is not
+         * started with failed connections. The JMS producers is tested as well.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
          * Group: common
          * 
-         * @param skipDlqDeclare the value to set
+         * @param testConnectionOnStartup the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointConsumerBuilder skipDlqDeclare(
-                boolean skipDlqDeclare) {
-            doSetProperty("skipDlqDeclare", skipDlqDeclare);
+        default RabbitMQEndpointConsumerBuilder testConnectionOnStartup(
+                boolean testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
             return this;
         }
         /**
-         * 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).
+         * Specifies whether to test the connection on startup. This ensures
+         * that when Camel starts that all the JMS consumers have a valid
+         * connection to the JMS broker. If a connection cannot be granted then
+         * Camel throws an exception on startup. This ensures that Camel is not
+         * started with failed connections. The JMS producers is tested as well.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
          * 
          * Default: false
-         * Group: common
-         * 
-         * @param skipDlqDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder skipDlqDeclare(
-                String skipDlqDeclare) {
-            doSetProperty("skipDlqDeclare", skipDlqDeclare);
-            return this;
-        }
-        /**
-         * This can be used if we need to declare the queue but not the
-         * exchange.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipExchangeDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder skipExchangeDeclare(
-                boolean skipExchangeDeclare) {
-            doSetProperty("skipExchangeDeclare", skipExchangeDeclare);
-            return this;
-        }
-        /**
-         * This can be used if we need to declare the queue but not the
-         * exchange.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipExchangeDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder skipExchangeDeclare(
-                String skipExchangeDeclare) {
-            doSetProperty("skipExchangeDeclare", skipExchangeDeclare);
-            return this;
-        }
-        /**
-         * If true the queue will not be bound to the exchange after declaring
-         * it.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueBind the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder skipQueueBind(
-                boolean skipQueueBind) {
-            doSetProperty("skipQueueBind", skipQueueBind);
-            return this;
-        }
-        /**
-         * If true the queue will not be bound to the exchange after declaring
-         * it.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueBind the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder skipQueueBind(
-                String skipQueueBind) {
-            doSetProperty("skipQueueBind", skipQueueBind);
-            return this;
-        }
-        /**
-         * If true the producer will not declare and bind a queue. This can be
-         * used for directing messages via an existing routing key.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder skipQueueDeclare(
-                boolean skipQueueDeclare) {
-            doSetProperty("skipQueueDeclare", skipQueueDeclare);
-            return this;
-        }
-        /**
-         * If true the producer will not declare and bind a queue. This can be
-         * used for directing messages via an existing routing key.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder skipQueueDeclare(
-                String skipQueueDeclare) {
-            doSetProperty("skipQueueDeclare", skipQueueDeclare);
-            return this;
-        }
-        /**
-         * The vhost for the channel.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: /
-         * Group: common
-         * 
-         * @param vhost the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder vhost(String vhost) {
-            doSetProperty("vhost", vhost);
-            return this;
-        }
-        /**
-         * If messages should be auto acknowledged.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: consumer
-         * 
-         * @param autoAck the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder autoAck(boolean autoAck) {
-            doSetProperty("autoAck", autoAck);
-            return this;
-        }
-        /**
-         * If messages should be auto acknowledged.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: consumer
-         * 
-         * @param autoAck the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder autoAck(String autoAck) {
-            doSetProperty("autoAck", autoAck);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param bridgeErrorHandler the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder bridgeErrorHandler(
-                boolean bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param bridgeErrorHandler the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder bridgeErrorHandler(
-                String bridgeErrorHandler) {
-            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
-            return this;
-        }
-        /**
-         * Number of concurrent consumers when consuming from broker. (eg
-         * similar as to the same option for the JMS component).
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 1
-         * Group: consumer
-         * 
-         * @param concurrentConsumers the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder concurrentConsumers(
-                int concurrentConsumers) {
-            doSetProperty("concurrentConsumers", concurrentConsumers);
-            return this;
-        }
-        /**
-         * Number of concurrent consumers when consuming from broker. (eg
-         * similar as to the same option for the JMS component).
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 1
-         * Group: consumer
-         * 
-         * @param concurrentConsumers the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder concurrentConsumers(
-                String concurrentConsumers) {
-            doSetProperty("concurrentConsumers", concurrentConsumers);
-            return this;
-        }
-        /**
-         * Specify a client-generated consumer tag to establish context when
-         * invoking the consume operation.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param consumerTag the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder consumerTag(String consumerTag) {
-            doSetProperty("consumerTag", consumerTag);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param exclusiveConsumer the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder exclusiveConsumer(
-                boolean exclusiveConsumer) {
-            doSetProperty("exclusiveConsumer", exclusiveConsumer);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param exclusiveConsumer the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder exclusiveConsumer(
-                String exclusiveConsumer) {
-            doSetProperty("exclusiveConsumer", exclusiveConsumer);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param prefetchCount the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchCount(int prefetchCount) {
-            doSetProperty("prefetchCount", prefetchCount);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param prefetchCount the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchCount(
-                String prefetchCount) {
-            doSetProperty("prefetchCount", prefetchCount);
-            return this;
-        }
-        /**
-         * Enables the quality of service on the RabbitMQConsumer side. You need
-         * to specify the option of prefetchSize, prefetchCount, prefetchGlobal
-         * at the same time.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param prefetchEnabled the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchEnabled(
-                boolean prefetchEnabled) {
-            doSetProperty("prefetchEnabled", prefetchEnabled);
-            return this;
-        }
-        /**
-         * Enables the quality of service on the RabbitMQConsumer side. You need
-         * to specify the option of prefetchSize, prefetchCount, prefetchGlobal
-         * at the same time.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param prefetchEnabled the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchEnabled(
-                String prefetchEnabled) {
-            doSetProperty("prefetchEnabled", prefetchEnabled);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param prefetchGlobal the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchGlobal(
-                boolean prefetchGlobal) {
-            doSetProperty("prefetchGlobal", prefetchGlobal);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param prefetchGlobal the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchGlobal(
-                String prefetchGlobal) {
-            doSetProperty("prefetchGlobal", prefetchGlobal);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param prefetchSize the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchSize(int prefetchSize) {
-            doSetProperty("prefetchSize", prefetchSize);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: consumer
-         * 
-         * @param prefetchSize the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder prefetchSize(String prefetchSize) {
-            doSetProperty("prefetchSize", prefetchSize);
-            return this;
-        }
-        /**
-         * 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. If the header CamelRabbitmqRequeue is
-         * present then the value of the header will be used, otherwise this
-         * endpoint value is used as fallback. 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 option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param reQueue the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder reQueue(boolean reQueue) {
-            doSetProperty("reQueue", reQueue);
-            return this;
-        }
-        /**
-         * 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. If the header CamelRabbitmqRequeue is
-         * present then the value of the header will be used, otherwise this
-         * endpoint value is used as fallback. 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 option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: consumer
-         * 
-         * @param reQueue the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder reQueue(String reQueue) {
-            doSetProperty("reQueue", reQueue);
-            return this;
-        }
-        /**
-         * Password for authenticated access.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: guest
-         * Group: security
-         * 
-         * @param password the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder password(String password) {
-            doSetProperty("password", password);
-            return this;
-        }
-        /**
-         * Enables SSL on connection, accepted value are true, TLS and 'SSLv3.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param sslProtocol the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder sslProtocol(String sslProtocol) {
-            doSetProperty("sslProtocol", sslProtocol);
-            return this;
-        }
-        /**
-         * Configure SSL trust manager, SSL should be enabled for this option to
-         * be effective.
-         * 
-         * The option is a: &lt;code&gt;javax.net.ssl.TrustManager&lt;/code&gt;
-         * type.
-         * 
-         * Group: security
-         * 
-         * @param trustManager the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder trustManager(Object trustManager) {
-            doSetProperty("trustManager", trustManager);
-            return this;
-        }
-        /**
-         * Configure SSL trust manager, SSL should be enabled for this option to
-         * be effective.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.net.ssl.TrustManager&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param trustManager the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder trustManager(String trustManager) {
-            doSetProperty("trustManager", trustManager);
-            return this;
-        }
-        /**
-         * Username in case of authenticated access.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: guest
-         * Group: security
-         * 
-         * @param username the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointConsumerBuilder username(String username) {
-            doSetProperty("username", username);
-            return this;
-        }
-    }
-
-    /**
-     * Advanced builder for endpoint consumers for the RabbitMQ component.
-     */
-    public interface AdvancedRabbitMQEndpointConsumerBuilder
-            extends
-                EndpointConsumerBuilder {
-        default RabbitMQEndpointConsumerBuilder basic() {
-            return (RabbitMQEndpointConsumerBuilder) this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a:
-         * &lt;code&gt;org.apache.camel.spi.ExceptionHandler&lt;/code&gt; type.
-         * 
-         * Group: consumer (advanced)
-         * 
-         * @param exceptionHandler the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder exceptionHandler(
-                ExceptionHandler exceptionHandler) {
-            doSetProperty("exceptionHandler", exceptionHandler);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;org.apache.camel.spi.ExceptionHandler&lt;/code&gt; type.
-         * 
-         * Group: consumer (advanced)
-         * 
-         * @param exceptionHandler the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder exceptionHandler(
-                String exceptionHandler) {
-            doSetProperty("exceptionHandler", exceptionHandler);
-            return this;
-        }
-        /**
-         * Sets the exchange pattern when the consumer creates an exchange.
-         * 
-         * The option is a:
-         * &lt;code&gt;org.apache.camel.ExchangePattern&lt;/code&gt; type.
-         * 
-         * Group: consumer (advanced)
-         * 
-         * @param exchangePattern the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder exchangePattern(
-                ExchangePattern exchangePattern) {
-            doSetProperty("exchangePattern", exchangePattern);
-            return this;
-        }
-        /**
-         * Sets the exchange pattern when the consumer creates an exchange.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;org.apache.camel.ExchangePattern&lt;/code&gt; type.
-         * 
-         * Group: consumer (advanced)
-         * 
-         * @param exchangePattern the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder exchangePattern(
-                String exchangePattern) {
-            doSetProperty("exchangePattern", exchangePattern);
-            return this;
-        }
-        /**
-         * The consumer uses a Thread Pool Executor with a fixed number of
-         * threads. This setting allows you to set that number of threads.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 10
-         * Group: consumer (advanced)
-         * 
-         * @param threadPoolSize the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder threadPoolSize(
-                int threadPoolSize) {
-            doSetProperty("threadPoolSize", threadPoolSize);
-            return this;
-        }
-        /**
-         * The consumer uses a Thread Pool Executor with a fixed number of
-         * threads. This setting allows you to set that number of threads.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 10
-         * Group: consumer (advanced)
-         * 
-         * @param threadPoolSize the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder threadPoolSize(
-                String threadPoolSize) {
-            doSetProperty("threadPoolSize", threadPoolSize);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param allowMessageBodySerialization the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder allowMessageBodySerialization(
-                boolean allowMessageBodySerialization) {
-            doSetProperty("allowMessageBodySerialization", allowMessageBodySerialization);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param allowMessageBodySerialization the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder allowMessageBodySerialization(
-                String allowMessageBodySerialization) {
-            doSetProperty("allowMessageBodySerialization", allowMessageBodySerialization);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the args(String, Object)
-         * method to add a value (call the method multiple times to set more
-         * values).
-         * 
-         * Group: advanced
-         * 
-         * @param key the option key
-         * @param value the option value
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder args(
-                String key,
-                Object value) {
-            doSetMultiValueProperty("args", "arg." + key, value);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the args(String, Object)
-         * method to add a value (call the method multiple times to set more
-         * values).
-         * 
-         * Group: advanced
-         * 
-         * @param values the values
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder args(Map values) {
-            doSetMultiValueProperties("args", "arg.", values);
-            return this;
-        }
-        /**
-         * Connection client properties (client info used in negotiating with
-         * the server).
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param clientProperties the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder clientProperties(
-                Map<String, Object> clientProperties) {
-            doSetProperty("clientProperties", clientProperties);
-            return this;
-        }
-        /**
-         * Connection client properties (client info used in negotiating with
-         * the server).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param clientProperties the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder clientProperties(
-                String clientProperties) {
-            doSetProperty("clientProperties", clientProperties);
-            return this;
-        }
-        /**
-         * Custom rabbitmq ExceptionHandler for ConnectionFactory.
-         * 
-         * The option is a:
-         * &lt;code&gt;com.rabbitmq.client.ExceptionHandler&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactoryExceptionHandler the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder connectionFactoryExceptionHandler(
-                Object connectionFactoryExceptionHandler) {
-            doSetProperty("connectionFactoryExceptionHandler", connectionFactoryExceptionHandler);
-            return this;
-        }
-        /**
-         * Custom rabbitmq ExceptionHandler for ConnectionFactory.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;com.rabbitmq.client.ExceptionHandler&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactoryExceptionHandler the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder connectionFactoryExceptionHandler(
-                String connectionFactoryExceptionHandler) {
-            doSetProperty("connectionFactoryExceptionHandler", connectionFactoryExceptionHandler);
-            return this;
-        }
-        /**
-         * Connection timeout.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60000
-         * Group: advanced
-         * 
-         * @param connectionTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder connectionTimeout(
-                int connectionTimeout) {
-            doSetProperty("connectionTimeout", connectionTimeout);
-            return this;
-        }
-        /**
-         * Connection timeout.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60000
-         * Group: advanced
-         * 
-         * @param connectionTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder connectionTimeout(
-                String connectionTimeout) {
-            doSetProperty("connectionTimeout", connectionTimeout);
-            return this;
-        }
-        /**
-         * Network recovery interval in milliseconds (interval used when
-         * recovering from network failure).
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Default: 5000
-         * Group: advanced
-         * 
-         * @param networkRecoveryInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder networkRecoveryInterval(
-                Integer networkRecoveryInterval) {
-            doSetProperty("networkRecoveryInterval", networkRecoveryInterval);
-            return this;
-        }
-        /**
-         * Network recovery interval in milliseconds (interval used when
-         * recovering from network failure).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Default: 5000
-         * Group: advanced
-         * 
-         * @param networkRecoveryInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder networkRecoveryInterval(
-                String networkRecoveryInterval) {
-            doSetProperty("networkRecoveryInterval", networkRecoveryInterval);
-            return this;
-        }
-        /**
-         * Connection requested channel max (max number of channels offered).
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 2047
-         * Group: advanced
-         * 
-         * @param requestedChannelMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestedChannelMax(
-                int requestedChannelMax) {
-            doSetProperty("requestedChannelMax", requestedChannelMax);
-            return this;
-        }
-        /**
-         * Connection requested channel max (max number of channels offered).
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 2047
-         * Group: advanced
-         * 
-         * @param requestedChannelMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestedChannelMax(
-                String requestedChannelMax) {
-            doSetProperty("requestedChannelMax", requestedChannelMax);
-            return this;
-        }
-        /**
-         * Connection requested frame max (max size of frame offered).
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 0
-         * Group: advanced
-         * 
-         * @param requestedFrameMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestedFrameMax(
-                int requestedFrameMax) {
-            doSetProperty("requestedFrameMax", requestedFrameMax);
-            return this;
-        }
-        /**
-         * Connection requested frame max (max size of frame offered).
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 0
-         * Group: advanced
-         * 
-         * @param requestedFrameMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestedFrameMax(
-                String requestedFrameMax) {
-            doSetProperty("requestedFrameMax", requestedFrameMax);
-            return this;
-        }
-        /**
-         * Connection requested heartbeat (heart-beat in seconds offered).
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60
-         * Group: advanced
-         * 
-         * @param requestedHeartbeat the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestedHeartbeat(
-                int requestedHeartbeat) {
-            doSetProperty("requestedHeartbeat", requestedHeartbeat);
-            return this;
-        }
-        /**
-         * Connection requested heartbeat (heart-beat in seconds offered).
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60
-         * Group: advanced
-         * 
-         * @param requestedHeartbeat the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestedHeartbeat(
-                String requestedHeartbeat) {
-            doSetProperty("requestedHeartbeat", requestedHeartbeat);
-            return this;
-        }
-        /**
-         * Set timeout for waiting for a reply when using the InOut Exchange
-         * Pattern (in milliseconds).
-         * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 20000
-         * Group: advanced
-         * 
-         * @param requestTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestTimeout(
-                long requestTimeout) {
-            doSetProperty("requestTimeout", requestTimeout);
-            return this;
-        }
-        /**
-         * Set timeout for waiting for a reply when using the InOut Exchange
-         * Pattern (in milliseconds).
-         * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 20000
-         * Group: advanced
-         * 
-         * @param requestTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestTimeout(
-                String requestTimeout) {
-            doSetProperty("requestTimeout", requestTimeout);
-            return this;
-        }
-        /**
-         * Set requestTimeoutCheckerInterval for inOut exchange.
-         * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 1000
-         * Group: advanced
-         * 
-         * @param requestTimeoutCheckerInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestTimeoutCheckerInterval(
-                long requestTimeoutCheckerInterval) {
-            doSetProperty("requestTimeoutCheckerInterval", requestTimeoutCheckerInterval);
-            return this;
-        }
-        /**
-         * Set requestTimeoutCheckerInterval for inOut exchange.
-         * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 1000
-         * Group: advanced
-         * 
-         * @param requestTimeoutCheckerInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder requestTimeoutCheckerInterval(
-                String requestTimeoutCheckerInterval) {
-            doSetProperty("requestTimeoutCheckerInterval", requestTimeoutCheckerInterval);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param synchronous the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder synchronous(
-                boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param synchronous the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder synchronous(
-                String synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
-        /**
-         * Enables connection topology recovery (should topology recovery be
-         * performed).
-         * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param topologyRecoveryEnabled the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder topologyRecoveryEnabled(
-                Boolean topologyRecoveryEnabled) {
-            doSetProperty("topologyRecoveryEnabled", topologyRecoveryEnabled);
-            return this;
-        }
-        /**
-         * Enables connection topology recovery (should topology recovery be
-         * performed).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param topologyRecoveryEnabled the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder topologyRecoveryEnabled(
-                String topologyRecoveryEnabled) {
-            doSetProperty("topologyRecoveryEnabled", topologyRecoveryEnabled);
-            return this;
-        }
-        /**
-         * When true and an inOut Exchange failed on the consumer side send the
-         * caused Exception back in the response.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param transferException the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder transferException(
-                boolean transferException) {
-            doSetProperty("transferException", transferException);
-            return this;
-        }
-        /**
-         * When true and an inOut Exchange failed on the consumer side send the
-         * caused Exception back in the response.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param transferException the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointConsumerBuilder transferException(
-                String transferException) {
-            doSetProperty("transferException", transferException);
-            return this;
-        }
-    }
-
-    /**
-     * Builder for endpoint producers for the RabbitMQ component.
-     */
-    public interface RabbitMQEndpointProducerBuilder
-            extends
-                EndpointProducerBuilder {
-        default AdvancedRabbitMQEndpointProducerBuilder advanced() {
-            return (AdvancedRabbitMQEndpointProducerBuilder) this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param addresses the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder addresses(String addresses) {
-            doSetProperty("addresses", addresses);
-            return this;
-        }
-        /**
-         * If it is true, the exchange will be deleted when it is no longer in
-         * use.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param autoDelete the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder autoDelete(boolean autoDelete) {
-            doSetProperty("autoDelete", autoDelete);
-            return this;
-        }
-        /**
-         * If it is true, the exchange will be deleted when it is no longer in
-         * use.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param autoDelete the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder autoDelete(String autoDelete) {
-            doSetProperty("autoDelete", autoDelete);
-            return this;
-        }
-        /**
-         * Enables connection automatic recovery (uses connection implementation
-         * that performs automatic recovery when existing connection has
-         * failures).
-         * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param automaticRecoveryEnabled the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder automaticRecoveryEnabled(
-                Boolean automaticRecoveryEnabled) {
-            doSetProperty("automaticRecoveryEnabled", automaticRecoveryEnabled);
-            return this;
-        }
-        /**
-         * Enables connection automatic recovery (uses connection implementation
-         * that performs automatic recovery when existing connection has
-         * failures).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param automaticRecoveryEnabled the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder automaticRecoveryEnabled(
-                String automaticRecoveryEnabled) {
-            doSetProperty("automaticRecoveryEnabled", automaticRecoveryEnabled);
-            return this;
-        }
-        /**
-         * To use a custom RabbitMQ connection factory. When this option is set,
-         * all connection options (connectionTimeout, requestedChannelMax...)
-         * set on URI are not used.
-         * 
-         * The option is a:
-         * &lt;code&gt;com.rabbitmq.client.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * To use a custom RabbitMQ connection factory. When this option is set,
-         * all connection options (connectionTimeout, requestedChannelMax...)
-         * set on URI are not used.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;com.rabbitmq.client.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * The name of the dead letter exchange.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param deadLetterExchange the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder deadLetterExchange(
-                String deadLetterExchange) {
-            doSetProperty("deadLetterExchange", deadLetterExchange);
-            return this;
-        }
-        /**
-         * The type of the dead letter exchange.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: direct
-         * Group: common
-         * 
-         * @param deadLetterExchangeType the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder deadLetterExchangeType(
-                String deadLetterExchangeType) {
-            doSetProperty("deadLetterExchangeType", deadLetterExchangeType);
-            return this;
-        }
-        /**
-         * The name of the dead letter queue.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param deadLetterQueue the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder deadLetterQueue(
-                String deadLetterQueue) {
-            doSetProperty("deadLetterQueue", deadLetterQueue);
-            return this;
-        }
-        /**
-         * The routing key for the dead letter exchange.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param deadLetterRoutingKey the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder deadLetterRoutingKey(
-                String deadLetterRoutingKey) {
-            doSetProperty("deadLetterRoutingKey", deadLetterRoutingKey);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param declare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder declare(boolean declare) {
-            doSetProperty("declare", declare);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param declare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder declare(String declare) {
-            doSetProperty("declare", declare);
-            return this;
-        }
-        /**
-         * If we are declaring a durable exchange (the exchange will survive a
-         * server restart).
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param durable the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder durable(boolean durable) {
-            doSetProperty("durable", durable);
-            return this;
-        }
-        /**
-         * If we are declaring a durable exchange (the exchange will survive a
-         * server restart).
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: common
-         * 
-         * @param durable the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder durable(String durable) {
-            doSetProperty("durable", durable);
-            return this;
-        }
-        /**
-         * The exchange type such as direct or topic.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: direct
-         * Group: common
-         * 
-         * @param exchangeType the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder exchangeType(String exchangeType) {
-            doSetProperty("exchangeType", exchangeType);
-            return this;
-        }
-        /**
-         * Exclusive queues may only be accessed by the current connection, and
-         * are deleted when that connection closes.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param exclusive the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder exclusive(boolean exclusive) {
-            doSetProperty("exclusive", exclusive);
-            return this;
-        }
-        /**
-         * Exclusive queues may only be accessed by the current connection, and
-         * are deleted when that connection closes.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param exclusive the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder exclusive(String exclusive) {
-            doSetProperty("exclusive", exclusive);
-            return this;
-        }
-        /**
-         * The hostname of the running rabbitmq instance or cluster.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param hostname the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder hostname(String hostname) {
-            doSetProperty("hostname", hostname);
-            return this;
-        }
-        /**
-         * Passive queues depend on the queue already to be available at
-         * RabbitMQ.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param passive the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder passive(boolean passive) {
-            doSetProperty("passive", passive);
-            return this;
-        }
-        /**
-         * Passive queues depend on the queue already to be available at
-         * RabbitMQ.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param passive the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder passive(String passive) {
-            doSetProperty("passive", passive);
-            return this;
-        }
-        /**
-         * Port number for the host with the running rabbitmq instance or
-         * cluster. Default value is 5672.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param portNumber the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder portNumber(int portNumber) {
-            doSetProperty("portNumber", portNumber);
-            return this;
-        }
-        /**
-         * Port number for the host with the running rabbitmq instance or
-         * cluster. Default value is 5672.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param portNumber the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder portNumber(String portNumber) {
-            doSetProperty("portNumber", portNumber);
-            return this;
-        }
-        /**
-         * The queue to receive messages from.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param queue the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder queue(String queue) {
-            doSetProperty("queue", queue);
-            return this;
-        }
-        /**
-         * The routing key to use when binding a consumer queue to the exchange.
-         * For producer routing keys, you set the header rabbitmq.ROUTING_KEY.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
-         * 
-         * @param routingKey the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder routingKey(String routingKey) {
-            doSetProperty("routingKey", routingKey);
-            return this;
-        }
-        /**
-         * 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).
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipDlqDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipDlqDeclare(
-                boolean skipDlqDeclare) {
-            doSetProperty("skipDlqDeclare", skipDlqDeclare);
-            return this;
-        }
-        /**
-         * 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).
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipDlqDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipDlqDeclare(
-                String skipDlqDeclare) {
-            doSetProperty("skipDlqDeclare", skipDlqDeclare);
-            return this;
-        }
-        /**
-         * This can be used if we need to declare the queue but not the
-         * exchange.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipExchangeDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipExchangeDeclare(
-                boolean skipExchangeDeclare) {
-            doSetProperty("skipExchangeDeclare", skipExchangeDeclare);
-            return this;
-        }
-        /**
-         * This can be used if we need to declare the queue but not the
-         * exchange.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipExchangeDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipExchangeDeclare(
-                String skipExchangeDeclare) {
-            doSetProperty("skipExchangeDeclare", skipExchangeDeclare);
-            return this;
-        }
-        /**
-         * If true the queue will not be bound to the exchange after declaring
-         * it.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueBind the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipQueueBind(
-                boolean skipQueueBind) {
-            doSetProperty("skipQueueBind", skipQueueBind);
-            return this;
-        }
-        /**
-         * If true the queue will not be bound to the exchange after declaring
-         * it.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueBind the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipQueueBind(
-                String skipQueueBind) {
-            doSetProperty("skipQueueBind", skipQueueBind);
-            return this;
-        }
-        /**
-         * If true the producer will not declare and bind a queue. This can be
-         * used for directing messages via an existing routing key.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipQueueDeclare(
-                boolean skipQueueDeclare) {
-            doSetProperty("skipQueueDeclare", skipQueueDeclare);
-            return this;
-        }
-        /**
-         * If true the producer will not declare and bind a queue. This can be
-         * used for directing messages via an existing routing key.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: common
-         * 
-         * @param skipQueueDeclare the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder skipQueueDeclare(
-                String skipQueueDeclare) {
-            doSetProperty("skipQueueDeclare", skipQueueDeclare);
-            return this;
-        }
-        /**
-         * The vhost for the channel.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: /
-         * Group: common
-         * 
-         * @param vhost the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder vhost(String vhost) {
-            doSetProperty("vhost", vhost);
-            return this;
-        }
-        /**
-         * Map of additional headers. These headers will be set only when the
-         * 'allowCustomHeaders' is set to true.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: producer
-         * 
-         * @param additionalHeaders the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder additionalHeaders(
-                Map<String, Object> additionalHeaders) {
-            doSetProperty("additionalHeaders", additionalHeaders);
-            return this;
-        }
-        /**
-         * Map of additional headers. These headers will be set only when the
-         * 'allowCustomHeaders' is set to true.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: producer
-         * 
-         * @param additionalHeaders the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder additionalHeaders(
-                String additionalHeaders) {
-            doSetProperty("additionalHeaders", additionalHeaders);
-            return this;
-        }
-        /**
-         * Map of additional properties. These are standard RabbitMQ properties
-         * as defined in com.rabbitmq.client.AMQP.BasicProperties. The map keys
-         * should be from org.apache.camel.component.rabbitmq.RabbitMQConstants.
-         * Any other keys will be ignored.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: producer
-         * 
-         * @param additionalProperties the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder additionalProperties(
-                Map<String, Object> additionalProperties) {
-            doSetProperty("additionalProperties", additionalProperties);
-            return this;
-        }
-        /**
-         * Map of additional properties. These are standard RabbitMQ properties
-         * as defined in com.rabbitmq.client.AMQP.BasicProperties. The map keys
-         * should be from org.apache.camel.component.rabbitmq.RabbitMQConstants.
-         * Any other keys will be ignored.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: producer
-         * 
-         * @param additionalProperties the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder additionalProperties(
-                String additionalProperties) {
-            doSetProperty("additionalProperties", additionalProperties);
-            return this;
-        }
-        /**
-         * Allow pass custom values to header.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param allowCustomHeaders the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder allowCustomHeaders(
-                boolean allowCustomHeaders) {
-            doSetProperty("allowCustomHeaders", allowCustomHeaders);
-            return this;
-        }
-        /**
-         * Allow pass custom values to header.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param allowCustomHeaders the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder allowCustomHeaders(
-                String allowCustomHeaders) {
-            doSetProperty("allowCustomHeaders", allowCustomHeaders);
-            return this;
-        }
-        /**
-         * Allow pass null values to header.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param allowNullHeaders the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder allowNullHeaders(
-                boolean allowNullHeaders) {
-            doSetProperty("allowNullHeaders", allowNullHeaders);
-            return this;
-        }
-        /**
-         * Allow pass null values to header.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param allowNullHeaders the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder allowNullHeaders(
-                String allowNullHeaders) {
-            doSetProperty("allowNullHeaders", allowNullHeaders);
-            return this;
-        }
-        /**
-         * If the bridgeEndpoint is true, the producer will ignore the message
-         * header of rabbitmq.EXCHANGE_NAME and rabbitmq.ROUTING_KEY.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param bridgeEndpoint the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder bridgeEndpoint(
-                boolean bridgeEndpoint) {
-            doSetProperty("bridgeEndpoint", bridgeEndpoint);
-            return this;
-        }
-        /**
-         * If the bridgeEndpoint is true, the producer will ignore the message
-         * header of rabbitmq.EXCHANGE_NAME and rabbitmq.ROUTING_KEY.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param bridgeEndpoint the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder bridgeEndpoint(
-                String bridgeEndpoint) {
-            doSetProperty("bridgeEndpoint", bridgeEndpoint);
-            return this;
-        }
-        /**
-         * Get maximum number of opened channel in pool.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 10
-         * Group: producer
-         * 
-         * @param channelPoolMaxSize the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder channelPoolMaxSize(
-                int channelPoolMaxSize) {
-            doSetProperty("channelPoolMaxSize", channelPoolMaxSize);
-            return this;
-        }
-        /**
-         * Get maximum number of opened channel in pool.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 10
-         * Group: producer
-         * 
-         * @param channelPoolMaxSize the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder channelPoolMaxSize(
-                String channelPoolMaxSize) {
-            doSetProperty("channelPoolMaxSize", channelPoolMaxSize);
-            return this;
-        }
-        /**
-         * Set the maximum number of milliseconds to wait for a channel from the
-         * pool.
-         * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 1000
-         * Group: producer
-         * 
-         * @param channelPoolMaxWait the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder channelPoolMaxWait(
-                long channelPoolMaxWait) {
-            doSetProperty("channelPoolMaxWait", channelPoolMaxWait);
-            return this;
-        }
-        /**
-         * Set the maximum number of milliseconds to wait for a channel from the
-         * pool.
-         * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 1000
-         * Group: producer
-         * 
-         * @param channelPoolMaxWait the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder channelPoolMaxWait(
-                String channelPoolMaxWait) {
-            doSetProperty("channelPoolMaxWait", channelPoolMaxWait);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param guaranteedDeliveries the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder guaranteedDeliveries(
-                boolean guaranteedDeliveries) {
-            doSetProperty("guaranteedDeliveries", guaranteedDeliveries);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param guaranteedDeliveries the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder guaranteedDeliveries(
-                String guaranteedDeliveries) {
-            doSetProperty("guaranteedDeliveries", guaranteedDeliveries);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param immediate the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder immediate(boolean immediate) {
-            doSetProperty("immediate", immediate);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param immediate the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder immediate(String immediate) {
-            doSetProperty("immediate", immediate);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param lazyStartProducer the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder lazyStartProducer(
-                boolean lazyStartProducer) {
-            doSetProperty("lazyStartProducer", lazyStartProducer);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param lazyStartProducer the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder lazyStartProducer(
-                String lazyStartProducer) {
-            doSetProperty("lazyStartProducer", lazyStartProducer);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param mandatory the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder mandatory(boolean mandatory) {
-            doSetProperty("mandatory", mandatory);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param mandatory the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder mandatory(String mandatory) {
-            doSetProperty("mandatory", mandatory);
-            return this;
-        }
-        /**
-         * When true, the message will be published with publisher
-         * acknowledgements turned on.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param publisherAcknowledgements the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder publisherAcknowledgements(
-                boolean publisherAcknowledgements) {
-            doSetProperty("publisherAcknowledgements", publisherAcknowledgements);
-            return this;
-        }
-        /**
-         * When true, the message will be published with publisher
-         * acknowledgements turned on.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param publisherAcknowledgements the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder publisherAcknowledgements(
-                String publisherAcknowledgements) {
-            doSetProperty("publisherAcknowledgements", publisherAcknowledgements);
-            return this;
-        }
-        /**
-         * The amount of time in milliseconds to wait for a basic.ack response
-         * from RabbitMQ server.
-         * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Group: producer
-         * 
-         * @param publisherAcknowledgementsTimeout the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder publisherAcknowledgementsTimeout(
-                long publisherAcknowledgementsTimeout) {
-            doSetProperty("publisherAcknowledgementsTimeout", publisherAcknowledgementsTimeout);
-            return this;
-        }
-        /**
-         * The amount of time in milliseconds to wait for a basic.ack response
-         * from RabbitMQ server.
-         * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Group: producer
-         * 
-         * @param publisherAcknowledgementsTimeout the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder publisherAcknowledgementsTimeout(
-                String publisherAcknowledgementsTimeout) {
-            doSetProperty("publisherAcknowledgementsTimeout", publisherAcknowledgementsTimeout);
-            return this;
-        }
-        /**
-         * Password for authenticated access.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: guest
-         * Group: security
-         * 
-         * @param password the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder password(String password) {
-            doSetProperty("password", password);
-            return this;
-        }
-        /**
-         * Enables SSL on connection, accepted value are true, TLS and 'SSLv3.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param sslProtocol the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder sslProtocol(String sslProtocol) {
-            doSetProperty("sslProtocol", sslProtocol);
-            return this;
-        }
-        /**
-         * Configure SSL trust manager, SSL should be enabled for this option to
-         * be effective.
-         * 
-         * The option is a: &lt;code&gt;javax.net.ssl.TrustManager&lt;/code&gt;
-         * type.
-         * 
-         * Group: security
-         * 
-         * @param trustManager the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder trustManager(Object trustManager) {
-            doSetProperty("trustManager", trustManager);
-            return this;
-        }
-        /**
-         * Configure SSL trust manager, SSL should be enabled for this option to
-         * be effective.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.net.ssl.TrustManager&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param trustManager the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder trustManager(String trustManager) {
-            doSetProperty("trustManager", trustManager);
-            return this;
-        }
-        /**
-         * Username in case of authenticated access.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: guest
-         * Group: security
-         * 
-         * @param username the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointProducerBuilder username(String username) {
-            doSetProperty("username", username);
-            return this;
-        }
-    }
-
-    /**
-     * Advanced builder for endpoint producers for the RabbitMQ component.
-     */
-    public interface AdvancedRabbitMQEndpointProducerBuilder
-            extends
-                EndpointProducerBuilder {
-        default RabbitMQEndpointProducerBuilder basic() {
-            return (RabbitMQEndpointProducerBuilder) this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param allowMessageBodySerialization the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder allowMessageBodySerialization(
-                boolean allowMessageBodySerialization) {
-            doSetProperty("allowMessageBodySerialization", allowMessageBodySerialization);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param allowMessageBodySerialization the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder allowMessageBodySerialization(
-                String allowMessageBodySerialization) {
-            doSetProperty("allowMessageBodySerialization", allowMessageBodySerialization);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the args(String, Object)
-         * method to add a value (call the method multiple times to set more
-         * values).
-         * 
-         * Group: advanced
-         * 
-         * @param key the option key
-         * @param value the option value
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder args(
-                String key,
-                Object value) {
-            doSetMultiValueProperty("args", "arg." + key, value);
-            return this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the args(String, Object)
-         * method to add a value (call the method multiple times to set more
-         * values).
-         * 
-         * Group: advanced
-         * 
-         * @param values the values
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder args(Map values) {
-            doSetMultiValueProperties("args", "arg.", values);
-            return this;
-        }
-        /**
-         * Connection client properties (client info used in negotiating with
-         * the server).
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param clientProperties the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder clientProperties(
-                Map<String, Object> clientProperties) {
-            doSetProperty("clientProperties", clientProperties);
-            return this;
-        }
-        /**
-         * Connection client properties (client info used in negotiating with
-         * the server).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param clientProperties the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder clientProperties(
-                String clientProperties) {
-            doSetProperty("clientProperties", clientProperties);
-            return this;
-        }
-        /**
-         * Custom rabbitmq ExceptionHandler for ConnectionFactory.
-         * 
-         * The option is a:
-         * &lt;code&gt;com.rabbitmq.client.ExceptionHandler&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactoryExceptionHandler the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder connectionFactoryExceptionHandler(
-                Object connectionFactoryExceptionHandler) {
-            doSetProperty("connectionFactoryExceptionHandler", connectionFactoryExceptionHandler);
-            return this;
-        }
-        /**
-         * Custom rabbitmq ExceptionHandler for ConnectionFactory.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;com.rabbitmq.client.ExceptionHandler&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactoryExceptionHandler the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder connectionFactoryExceptionHandler(
-                String connectionFactoryExceptionHandler) {
-            doSetProperty("connectionFactoryExceptionHandler", connectionFactoryExceptionHandler);
-            return this;
-        }
-        /**
-         * Connection timeout.
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60000
-         * Group: advanced
-         * 
-         * @param connectionTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder connectionTimeout(
-                int connectionTimeout) {
-            doSetProperty("connectionTimeout", connectionTimeout);
-            return this;
-        }
-        /**
-         * Connection timeout.
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60000
-         * Group: advanced
-         * 
-         * @param connectionTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder connectionTimeout(
-                String connectionTimeout) {
-            doSetProperty("connectionTimeout", connectionTimeout);
-            return this;
-        }
-        /**
-         * Network recovery interval in milliseconds (interval used when
-         * recovering from network failure).
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Default: 5000
-         * Group: advanced
-         * 
-         * @param networkRecoveryInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder networkRecoveryInterval(
-                Integer networkRecoveryInterval) {
-            doSetProperty("networkRecoveryInterval", networkRecoveryInterval);
-            return this;
-        }
-        /**
-         * Network recovery interval in milliseconds (interval used when
-         * recovering from network failure).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Default: 5000
-         * Group: advanced
-         * 
-         * @param networkRecoveryInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder networkRecoveryInterval(
-                String networkRecoveryInterval) {
-            doSetProperty("networkRecoveryInterval", networkRecoveryInterval);
-            return this;
-        }
-        /**
-         * Connection requested channel max (max number of channels offered).
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 2047
-         * Group: advanced
-         * 
-         * @param requestedChannelMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestedChannelMax(
-                int requestedChannelMax) {
-            doSetProperty("requestedChannelMax", requestedChannelMax);
-            return this;
-        }
-        /**
-         * Connection requested channel max (max number of channels offered).
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 2047
-         * Group: advanced
-         * 
-         * @param requestedChannelMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestedChannelMax(
-                String requestedChannelMax) {
-            doSetProperty("requestedChannelMax", requestedChannelMax);
-            return this;
-        }
-        /**
-         * Connection requested frame max (max size of frame offered).
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 0
-         * Group: advanced
-         * 
-         * @param requestedFrameMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestedFrameMax(
-                int requestedFrameMax) {
-            doSetProperty("requestedFrameMax", requestedFrameMax);
-            return this;
-        }
-        /**
-         * Connection requested frame max (max size of frame offered).
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 0
-         * Group: advanced
-         * 
-         * @param requestedFrameMax the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestedFrameMax(
-                String requestedFrameMax) {
-            doSetProperty("requestedFrameMax", requestedFrameMax);
-            return this;
-        }
-        /**
-         * Connection requested heartbeat (heart-beat in seconds offered).
-         * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60
-         * Group: advanced
-         * 
-         * @param requestedHeartbeat the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestedHeartbeat(
-                int requestedHeartbeat) {
-            doSetProperty("requestedHeartbeat", requestedHeartbeat);
-            return this;
-        }
-        /**
-         * Connection requested heartbeat (heart-beat in seconds offered).
-         * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
-         * 
-         * Default: 60
-         * Group: advanced
-         * 
-         * @param requestedHeartbeat the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestedHeartbeat(
-                String requestedHeartbeat) {
-            doSetProperty("requestedHeartbeat", requestedHeartbeat);
-            return this;
-        }
-        /**
-         * Set timeout for waiting for a reply when using the InOut Exchange
-         * Pattern (in milliseconds).
-         * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 20000
-         * Group: advanced
-         * 
-         * @param requestTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestTimeout(
-                long requestTimeout) {
-            doSetProperty("requestTimeout", requestTimeout);
-            return this;
-        }
-        /**
-         * Set timeout for waiting for a reply when using the InOut Exchange
-         * Pattern (in milliseconds).
-         * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 20000
-         * Group: advanced
-         * 
-         * @param requestTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestTimeout(
-                String requestTimeout) {
-            doSetProperty("requestTimeout", requestTimeout);
-            return this;
-        }
-        /**
-         * Set requestTimeoutCheckerInterval for inOut exchange.
-         * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 1000
-         * Group: advanced
-         * 
-         * @param requestTimeoutCheckerInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestTimeoutCheckerInterval(
-                long requestTimeoutCheckerInterval) {
-            doSetProperty("requestTimeoutCheckerInterval", requestTimeoutCheckerInterval);
-            return this;
-        }
-        /**
-         * Set requestTimeoutCheckerInterval for inOut exchange.
-         * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 1000
-         * Group: advanced
-         * 
-         * @param requestTimeoutCheckerInterval the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder requestTimeoutCheckerInterval(
-                String requestTimeoutCheckerInterval) {
-            doSetProperty("requestTimeoutCheckerInterval", requestTimeoutCheckerInterval);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param synchronous the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder synchronous(
-                boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
-        /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: advanced
-         * 
-         * @param synchronous the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder synchronous(
-                String synchronous) {
-            doSetProperty("synchronous", synchronous);
-            return this;
-        }
-        /**
-         * Enables connection topology recovery (should topology recovery be
-         * performed).
-         * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param topologyRecoveryEnabled the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder topologyRecoveryEnabled(
-                Boolean topologyRecoveryEnabled) {
-            doSetProperty("topologyRecoveryEnabled", topologyRecoveryEnabled);
-            return this;
-        }
-        /**
-         * Enables connection topology recovery (should topology recovery be
-         * performed).
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Group: advanced
+         * Group: common
          * 
-         * @param topologyRecoveryEnabled the value to set
+         * @param testConnectionOnStartup the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointProducerBuilder topologyRecoveryEnabled(
-                String topologyRecoveryEnabled) {
-            doSetProperty("topologyRecoveryEnabled", topologyRecoveryEnabled);
+        default RabbitMQEndpointConsumerBuilder testConnectionOnStartup(
+                String testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
             return this;
         }
         /**
-         * When true and an inOut Exchange failed on the consumer side send the
-         * caused Exception back in the response.
+         * Whether the consumer processes the Exchange asynchronously. If
+         * enabled then the consumer may pickup the next message from the queue,
+         * while the previous message is being processed asynchronously (by the
+         * Asynchronous Routing Engine). This means that messages may be
+         * processed not 100% strictly in order. If disabled (as default) then
+         * the Exchange is fully processed before the consumer will pickup the
+         * next message from the queue.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
-         * Group: advanced
+         * Group: consumer
          * 
-         * @param transferException the value to set
+         * @param asyncConsumer the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointProducerBuilder transferException(
-                boolean transferException) {
-            doSetProperty("transferException", transferException);
+        default RabbitMQEndpointConsumerBuilder asyncConsumer(
+                boolean asyncConsumer) {
+            doSetProperty("asyncConsumer", asyncConsumer);
             return this;
         }
         /**
-         * When true and an inOut Exchange failed on the consumer side send the
-         * caused Exception back in the response.
+         * Whether the consumer processes the Exchange asynchronously. If
+         * enabled then the consumer may pickup the next message from the queue,
+         * while the previous message is being processed asynchronously (by the
+         * Asynchronous Routing Engine). This means that messages may be
+         * processed not 100% strictly in order. If disabled (as default) then
+         * the Exchange is fully processed before the consumer will pickup the
+         * next message from the queue.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
          * 
          * Default: false
-         * Group: advanced
-         * 
-         * @param transferException the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointProducerBuilder transferException(
-                String transferException) {
-            doSetProperty("transferException", transferException);
-            return this;
-        }
-    }
-
-    /**
-     * Builder for endpoint for the RabbitMQ component.
-     */
-    public interface RabbitMQEndpointBuilder
-            extends
-                RabbitMQEndpointConsumerBuilder,
-                RabbitMQEndpointProducerBuilder {
-        default AdvancedRabbitMQEndpointBuilder advanced() {
-            return (AdvancedRabbitMQEndpointBuilder) this;
-        }
-        /**
-         * 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.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: common
+         * Group: consumer
          * 
-         * @param addresses the value to set
+         * @param asyncConsumer the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder addresses(String addresses) {
-            doSetProperty("addresses", addresses);
+        default RabbitMQEndpointConsumerBuilder asyncConsumer(
+                String asyncConsumer) {
+            doSetProperty("asyncConsumer", asyncConsumer);
             return this;
         }
         /**
-         * If it is true, the exchange will be deleted when it is no longer in
-         * use.
+         * Specifies whether the consumer should auto declare binding between
+         * exchange, queue and routing key when starting.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: true
-         * Group: common
+         * Group: consumer
          * 
-         * @param autoDelete the value to set
+         * @param autoDeclare the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder autoDelete(boolean autoDelete) {
-            doSetProperty("autoDelete", autoDelete);
+        default RabbitMQEndpointConsumerBuilder autoDeclare(boolean autoDeclare) {
+            doSetProperty("autoDeclare", autoDeclare);
             return this;
         }
         /**
-         * If it is true, the exchange will be deleted when it is no longer in
-         * use.
+         * Specifies whether the consumer should auto declare binding between
+         * exchange, queue and routing key when starting.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
          * 
          * Default: true
-         * Group: common
+         * Group: consumer
          * 
-         * @param autoDelete the value to set
+         * @param autoDeclare the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder autoDelete(String autoDelete) {
-            doSetProperty("autoDelete", autoDelete);
+        default RabbitMQEndpointConsumerBuilder autoDeclare(String autoDeclare) {
+            doSetProperty("autoDeclare", autoDeclare);
             return this;
         }
         /**
-         * Enables connection automatic recovery (uses connection implementation
-         * that performs automatic recovery when existing connection has
-         * failures).
+         * Specifies whether the consumer container should auto-startup.
          * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: true
-         * Group: common
+         * Group: consumer
          * 
-         * @param automaticRecoveryEnabled the value to set
+         * @param autoStartup the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder automaticRecoveryEnabled(
-                Boolean automaticRecoveryEnabled) {
-            doSetProperty("automaticRecoveryEnabled", automaticRecoveryEnabled);
+        default RabbitMQEndpointConsumerBuilder autoStartup(boolean autoStartup) {
+            doSetProperty("autoStartup", autoStartup);
             return this;
         }
         /**
-         * Enables connection automatic recovery (uses connection implementation
-         * that performs automatic recovery when existing connection has
-         * failures).
+         * Specifies whether the consumer container should auto-startup.
          * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
          * 
          * Default: true
-         * Group: common
+         * Group: consumer
          * 
-         * @param automaticRecoveryEnabled the value to set
+         * @param autoStartup the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder automaticRecoveryEnabled(
-                String automaticRecoveryEnabled) {
-            doSetProperty("automaticRecoveryEnabled", automaticRecoveryEnabled);
+        default RabbitMQEndpointConsumerBuilder autoStartup(String autoStartup) {
+            doSetProperty("autoStartup", autoStartup);
             return this;
         }
         /**
-         * To use a custom RabbitMQ connection factory. When this option is set,
-         * all connection options (connectionTimeout, requestedChannelMax...)
-         * set on URI are not used.
+         * 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.
          * 
-         * The option is a:
-         * &lt;code&gt;com.rabbitmq.client.ConnectionFactory&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Group: common
+         * Default: false
+         * Group: consumer
          * 
-         * @param connectionFactory the value to set
+         * @param bridgeErrorHandler the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
+        default RabbitMQEndpointConsumerBuilder bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
             return this;
         }
         /**
-         * To use a custom RabbitMQ connection factory. When this option is set,
-         * all connection options (connectionTimeout, requestedChannelMax...)
-         * set on URI are not used.
+         * 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.
          * 
-         * The option will be converted to a
-         * &lt;code&gt;com.rabbitmq.client.ConnectionFactory&lt;/code&gt; type.
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
          * 
-         * Group: common
+         * Default: false
+         * Group: consumer
          * 
-         * @param connectionFactory the value to set
+         * @param bridgeErrorHandler the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
+        default RabbitMQEndpointConsumerBuilder bridgeErrorHandler(
+                String bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
             return this;
         }
         /**
@@ -3418,12 +337,12 @@ public interface RabbitMQEndpointBuilderFactory {
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Group: common
+         * Group: consumer
          * 
          * @param deadLetterExchange the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder deadLetterExchange(
+        default RabbitMQEndpointConsumerBuilder deadLetterExchange(
                 String deadLetterExchange) {
             doSetProperty("deadLetterExchange", deadLetterExchange);
             return this;
@@ -3434,12 +353,12 @@ public interface RabbitMQEndpointBuilderFactory {
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
          * Default: direct
-         * Group: common
+         * Group: consumer
          * 
          * @param deadLetterExchangeType the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder deadLetterExchangeType(
+        default RabbitMQEndpointConsumerBuilder deadLetterExchangeType(
                 String deadLetterExchangeType) {
             doSetProperty("deadLetterExchangeType", deadLetterExchangeType);
             return this;
@@ -3449,12 +368,13 @@ public interface RabbitMQEndpointBuilderFactory {
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Group: common
+         * Group: consumer
          * 
          * @param deadLetterQueue the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder deadLetterQueue(String deadLetterQueue) {
+        default RabbitMQEndpointConsumerBuilder deadLetterQueue(
+                String deadLetterQueue) {
             doSetProperty("deadLetterQueue", deadLetterQueue);
             return this;
         }
@@ -3463,365 +383,386 @@ public interface RabbitMQEndpointBuilderFactory {
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Group: common
+         * Group: consumer
          * 
          * @param deadLetterRoutingKey the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder deadLetterRoutingKey(
+        default RabbitMQEndpointConsumerBuilder deadLetterRoutingKey(
                 String deadLetterRoutingKey) {
             doSetProperty("deadLetterRoutingKey", deadLetterRoutingKey);
             return this;
         }
         /**
-         * 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.
+         * The type of the exchange.
          * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Default: true
-         * Group: common
+         * Default: direct
+         * Group: consumer
          * 
-         * @param declare the value to set
+         * @param exchangeType the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder declare(boolean declare) {
-            doSetProperty("declare", declare);
+        default RabbitMQEndpointConsumerBuilder exchangeType(String exchangeType) {
+            doSetProperty("exchangeType", exchangeType);
             return this;
         }
         /**
-         * 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.
+         * The queue(s) to use for consuming messages. Multiple queue names can
+         * be separated by comma.
          * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Default: true
-         * Group: common
+         * Group: consumer
          * 
-         * @param declare the value to set
+         * @param queues the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder declare(String declare) {
-            doSetProperty("declare", declare);
+        default RabbitMQEndpointConsumerBuilder queues(String queues) {
+            doSetProperty("queues", queues);
             return this;
         }
         /**
-         * If we are declaring a durable exchange (the exchange will survive a
-         * server restart).
+         * Specifies whether to use transacted mode.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: true
-         * Group: common
+         * Default: false
+         * Group: transaction
          * 
-         * @param durable the value to set
+         * @param transacted the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder durable(boolean durable) {
-            doSetProperty("durable", durable);
+        default RabbitMQEndpointConsumerBuilder transacted(boolean transacted) {
+            doSetProperty("transacted", transacted);
             return this;
         }
         /**
-         * If we are declaring a durable exchange (the exchange will survive a
-         * server restart).
+         * Specifies whether to use transacted mode.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
          * 
-         * Default: true
-         * Group: common
-         * 
-         * @param durable the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointBuilder durable(String durable) {
-            doSetProperty("durable", durable);
-            return this;
-        }
-        /**
-         * The exchange type such as direct or topic.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: direct
-         * Group: common
-         * 
-         * @param exchangeType the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointBuilder exchangeType(String exchangeType) {
-            doSetProperty("exchangeType", exchangeType);
-            return this;
-        }
-        /**
-         * Exclusive queues may only be accessed by the current connection, and
-         * are deleted when that connection closes.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
          * Default: false
-         * Group: common
+         * Group: transaction
          * 
-         * @param exclusive the value to set
+         * @param transacted the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder exclusive(boolean exclusive) {
-            doSetProperty("exclusive", exclusive);
+        default RabbitMQEndpointConsumerBuilder transacted(String transacted) {
+            doSetProperty("transacted", transacted);
             return this;
         }
+    }
+
+    /**
+     * Advanced builder for endpoint consumers for the Spring RabbitMQ
+     * component.
+     */
+    public interface AdvancedRabbitMQEndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default RabbitMQEndpointConsumerBuilder basic() {
+            return (RabbitMQEndpointConsumerBuilder) this;
+        }
         /**
-         * Exclusive queues may only be accessed by the current connection, and
-         * are deleted when that connection closes.
+         * 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.
          * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.spi.ExceptionHandler&lt;/code&gt; type.
          * 
-         * Default: false
-         * Group: common
+         * Group: consumer (advanced)
          * 
-         * @param exclusive the value to set
+         * @param exceptionHandler the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder exclusive(String exclusive) {
-            doSetProperty("exclusive", exclusive);
+        default AdvancedRabbitMQEndpointConsumerBuilder exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            doSetProperty("exceptionHandler", exceptionHandler);
             return this;
         }
         /**
-         * The hostname of the running rabbitmq instance or cluster.
+         * 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.
          * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.spi.ExceptionHandler&lt;/code&gt; type.
          * 
-         * Group: common
+         * Group: consumer (advanced)
          * 
-         * @param hostname the value to set
+         * @param exceptionHandler the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder hostname(String hostname) {
-            doSetProperty("hostname", hostname);
+        default AdvancedRabbitMQEndpointConsumerBuilder exceptionHandler(
+                String exceptionHandler) {
+            doSetProperty("exceptionHandler", exceptionHandler);
             return this;
         }
         /**
-         * Passive queues depend on the queue already to be available at
-         * RabbitMQ.
+         * Sets the exchange pattern when the consumer creates an exchange.
          * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.ExchangePattern&lt;/code&gt; type.
          * 
-         * Default: false
-         * Group: common
+         * Group: consumer (advanced)
          * 
-         * @param passive the value to set
+         * @param exchangePattern the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder passive(boolean passive) {
-            doSetProperty("passive", passive);
+        default AdvancedRabbitMQEndpointConsumerBuilder exchangePattern(
+                ExchangePattern exchangePattern) {
+            doSetProperty("exchangePattern", exchangePattern);
             return this;
         }
         /**
-         * Passive queues depend on the queue already to be available at
-         * RabbitMQ.
+         * Sets the exchange pattern when the consumer creates an exchange.
          * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.ExchangePattern&lt;/code&gt; type.
          * 
-         * Default: false
-         * Group: common
+         * Group: consumer (advanced)
          * 
-         * @param passive the value to set
+         * @param exchangePattern the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder passive(String passive) {
-            doSetProperty("passive", passive);
+        default AdvancedRabbitMQEndpointConsumerBuilder exchangePattern(
+                String exchangePattern) {
+            doSetProperty("exchangePattern", exchangePattern);
             return this;
         }
         /**
-         * Port number for the host with the running rabbitmq instance or
-         * cluster. Default value is 5672.
+         * Specify arguments for configuring the different RabbitMQ concepts, a
+         * different prefix is required for each element: arg.exchange.
+         * arg.queue. arg.binding. arg.dlq.exchange. arg.dlq.queue.
+         * arg.dlq.binding. For example to declare a queue with message ttl
+         * argument: args=arg.queue.x-message-ttl=60000.
          * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
+         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * The option is multivalued, and you can use the args(String, Object)
+         * method to add a value (call the method multiple times to set more
+         * values).
          * 
-         * Group: common
+         * Group: advanced
          * 
-         * @param portNumber the value to set
+         * @param key the option key
+         * @param value the option value
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder portNumber(int portNumber) {
-            doSetProperty("portNumber", portNumber);
+        default AdvancedRabbitMQEndpointConsumerBuilder args(
+                String key,
+                Object value) {
+            doSetMultiValueProperty("args", "arg." + key, value);
             return this;
         }
         /**
-         * Port number for the host with the running rabbitmq instance or
-         * cluster. Default value is 5672.
+         * Specify arguments for configuring the different RabbitMQ concepts, a
+         * different prefix is required for each element: arg.exchange.
+         * arg.queue. arg.binding. arg.dlq.exchange. arg.dlq.queue.
+         * arg.dlq.binding. For example to declare a queue with message ttl
+         * argument: args=arg.queue.x-message-ttl=60000.
          * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
+         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * The option is multivalued, and you can use the args(String, Object)
+         * method to add a value (call the method multiple times to set more
+         * values).
          * 
-         * Group: common
+         * Group: advanced
          * 
-         * @param portNumber the value to set
+         * @param values the values
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder portNumber(String portNumber) {
-            doSetProperty("portNumber", portNumber);
+        default AdvancedRabbitMQEndpointConsumerBuilder args(Map values) {
+            doSetMultiValueProperties("args", "arg.", values);
             return this;
         }
         /**
-         * The queue to receive messages from.
+         * To use a custom MessageConverter so you can be in control how to map
+         * to/from a org.springframework.amqp.core.Message.
          * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
          * 
-         * Group: common
+         * Group: advanced
          * 
-         * @param queue the value to set
+         * @param messageConverter the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder queue(String queue) {
-            doSetProperty("queue", queue);
+        default AdvancedRabbitMQEndpointConsumerBuilder messageConverter(
+                Object messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
             return this;
         }
         /**
-         * The routing key to use when binding a consumer queue to the exchange.
-         * For producer routing keys, you set the header rabbitmq.ROUTING_KEY.
+         * To use a custom MessageConverter so you can be in control how to map
+         * to/from a org.springframework.amqp.core.Message.
          * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * The option will be converted to a
+         * &lt;code&gt;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
          * 
-         * Group: common
+         * Group: advanced
          * 
-         * @param routingKey the value to set
+         * @param messageConverter the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder routingKey(String routingKey) {
-            doSetProperty("routingKey", routingKey);
+        default AdvancedRabbitMQEndpointConsumerBuilder messageConverter(
+                String messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
             return this;
         }
         /**
-         * 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).
+         * To use a custom MessagePropertiesConverter so you can be in control
+         * how to map to/from a org.springframework.amqp.core.MessageProperties.
          * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
          * 
-         * Default: false
-         * Group: common
+         * Group: advanced
          * 
-         * @param skipDlqDeclare the value to set
+         * @param messagePropertiesConverter the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipDlqDeclare(boolean skipDlqDeclare) {
-            doSetProperty("skipDlqDeclare", skipDlqDeclare);
+        default AdvancedRabbitMQEndpointConsumerBuilder messagePropertiesConverter(
+                Object messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
             return this;
         }
         /**
-         * 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).
+         * To use a custom MessagePropertiesConverter so you can be in control
+         * how to map to/from a org.springframework.amqp.core.MessageProperties.
          * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
          * 
-         * Default: false
-         * Group: common
+         * Group: advanced
          * 
-         * @param skipDlqDeclare the value to set
+         * @param messagePropertiesConverter the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipDlqDeclare(String skipDlqDeclare) {
-            doSetProperty("skipDlqDeclare", skipDlqDeclare);
+        default AdvancedRabbitMQEndpointConsumerBuilder messagePropertiesConverter(
+                String messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
             return this;
         }
         /**
-         * This can be used if we need to declare the queue but not the
-         * exchange.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
-         * Group: common
+         * Group: advanced
          * 
-         * @param skipExchangeDeclare the value to set
+         * @param synchronous the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipExchangeDeclare(
-                boolean skipExchangeDeclare) {
-            doSetProperty("skipExchangeDeclare", skipExchangeDeclare);
+        default AdvancedRabbitMQEndpointConsumerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * This can be used if we need to declare the queue but not the
-         * exchange.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
          * 
          * Default: false
-         * Group: common
+         * Group: advanced
          * 
-         * @param skipExchangeDeclare the value to set
+         * @param synchronous the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipExchangeDeclare(
-                String skipExchangeDeclare) {
-            doSetProperty("skipExchangeDeclare", skipExchangeDeclare);
+        default AdvancedRabbitMQEndpointConsumerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
+    }
+
+    /**
+     * Builder for endpoint producers for the Spring RabbitMQ component.
+     */
+    public interface RabbitMQEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default AdvancedRabbitMQEndpointProducerBuilder advanced() {
+            return (AdvancedRabbitMQEndpointProducerBuilder) this;
+        }
         /**
-         * If true the queue will not be bound to the exchange after declaring
-         * it.
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
          * 
-         * Default: false
          * Group: common
          * 
-         * @param skipQueueBind the value to set
+         * @param connectionFactory the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipQueueBind(boolean skipQueueBind) {
-            doSetProperty("skipQueueBind", skipQueueBind);
+        default RabbitMQEndpointProducerBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
             return this;
         }
         /**
-         * If true the queue will not be bound to the exchange after declaring
-         * it.
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
+         * The option will be converted to a
+         * &lt;code&gt;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
          * 
-         * Default: false
          * Group: common
          * 
-         * @param skipQueueBind the value to set
+         * @param connectionFactory the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipQueueBind(String skipQueueBind) {
-            doSetProperty("skipQueueBind", skipQueueBind);
+        default RabbitMQEndpointProducerBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
             return this;
         }
         /**
-         * If true the producer will not declare and bind a queue. This can be
-         * used for directing messages via an existing routing key.
+         * Specifies whether Camel ignores the ReplyTo header in messages. If
+         * true, Camel does not send a reply back to the destination specified
+         * in the ReplyTo header. You can use this option if you want Camel to
+         * consume from a route and you do not want Camel to automatically send
+         * back a reply message because another component in your code handles
+         * the reply message. You can also use this option if you want to use
+         * Camel as a proxy between different message brokers and you want to
+         * route message from one system to another.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
          * Group: common
          * 
-         * @param skipQueueDeclare the value to set
+         * @param disableReplyTo the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipQueueDeclare(
-                boolean skipQueueDeclare) {
-            doSetProperty("skipQueueDeclare", skipQueueDeclare);
+        default RabbitMQEndpointProducerBuilder disableReplyTo(
+                boolean disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
         /**
-         * If true the producer will not declare and bind a queue. This can be
-         * used for directing messages via an existing routing key.
+         * Specifies whether Camel ignores the ReplyTo header in messages. If
+         * true, Camel does not send a reply back to the destination specified
+         * in the ReplyTo header. You can use this option if you want Camel to
+         * consume from a route and you do not want Camel to automatically send
+         * back a reply message because another component in your code handles
+         * the reply message. You can also use this option if you want to use
+         * Camel as a proxy between different message brokers and you want to
+         * route message from one system to another.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -3829,172 +770,167 @@ public interface RabbitMQEndpointBuilderFactory {
          * Default: false
          * Group: common
          * 
-         * @param skipQueueDeclare the value to set
+         * @param disableReplyTo the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder skipQueueDeclare(String skipQueueDeclare) {
-            doSetProperty("skipQueueDeclare", skipQueueDeclare);
+        default RabbitMQEndpointProducerBuilder disableReplyTo(
+                String disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
         /**
-         * The vhost for the channel.
+         * Routing key.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Default: /
          * Group: common
          * 
-         * @param vhost the value to set
-         * @return the dsl builder
-         */
-        default RabbitMQEndpointBuilder vhost(String vhost) {
-            doSetProperty("vhost", vhost);
-            return this;
-        }
-        /**
-         * Password for authenticated access.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Default: guest
-         * Group: security
-         * 
-         * @param password the value to set
+         * @param routingKey the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder password(String password) {
-            doSetProperty("password", password);
+        default RabbitMQEndpointProducerBuilder routingKey(String routingKey) {
+            doSetProperty("routingKey", routingKey);
             return this;
         }
         /**
-         * Enables SSL on connection, accepted value are true, TLS and 'SSLv3.
+         * Specifies whether to test the connection on startup. This ensures
+         * that when Camel starts that all the JMS consumers have a valid
+         * connection to the JMS broker. If a connection cannot be granted then
+         * Camel throws an exception on startup. This ensures that Camel is not
+         * started with failed connections. The JMS producers is tested as well.
          * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Group: security
+         * Default: false
+         * Group: common
          * 
-         * @param sslProtocol the value to set
+         * @param testConnectionOnStartup the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder sslProtocol(String sslProtocol) {
-            doSetProperty("sslProtocol", sslProtocol);
+        default RabbitMQEndpointProducerBuilder testConnectionOnStartup(
+                boolean testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
             return this;
         }
         /**
-         * Configure SSL trust manager, SSL should be enabled for this option to
-         * be effective.
+         * Specifies whether to test the connection on startup. This ensures
+         * that when Camel starts that all the JMS consumers have a valid
+         * connection to the JMS broker. If a connection cannot be granted then
+         * Camel throws an exception on startup. This ensures that Camel is not
+         * started with failed connections. The JMS producers is tested as well.
          * 
-         * The option is a: &lt;code&gt;javax.net.ssl.TrustManager&lt;/code&gt;
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
          * 
-         * Group: security
+         * Default: false
+         * Group: common
          * 
-         * @param trustManager the value to set
+         * @param testConnectionOnStartup the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder trustManager(Object trustManager) {
-            doSetProperty("trustManager", trustManager);
+        default RabbitMQEndpointProducerBuilder testConnectionOnStartup(
+                String testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
             return this;
         }
         /**
-         * Configure SSL trust manager, SSL should be enabled for this option to
-         * be effective.
+         * 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.
          * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.net.ssl.TrustManager&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Group: security
+         * Default: false
+         * Group: producer
          * 
-         * @param trustManager the value to set
+         * @param lazyStartProducer the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder trustManager(String trustManager) {
-            doSetProperty("trustManager", trustManager);
+        default RabbitMQEndpointProducerBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
             return this;
         }
         /**
-         * Username in case of authenticated access.
+         * 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.
          * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
          * 
-         * Default: guest
-         * Group: security
+         * Default: false
+         * Group: producer
          * 
-         * @param username the value to set
+         * @param lazyStartProducer the value to set
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder username(String username) {
-            doSetProperty("username", username);
+        default RabbitMQEndpointProducerBuilder lazyStartProducer(
+                String lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
             return this;
         }
-    }
-
-    /**
-     * Advanced builder for endpoint for the RabbitMQ component.
-     */
-    public interface AdvancedRabbitMQEndpointBuilder
-            extends
-                AdvancedRabbitMQEndpointConsumerBuilder,
-                AdvancedRabbitMQEndpointProducerBuilder {
-        default RabbitMQEndpointBuilder basic() {
-            return (RabbitMQEndpointBuilder) this;
-        }
         /**
-         * 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.
+         * Specifies whether to use transacted mode.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
-         * Group: advanced
+         * Group: transaction
          * 
-         * @param allowMessageBodySerialization the value to set
+         * @param transacted the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder allowMessageBodySerialization(
-                boolean allowMessageBodySerialization) {
-            doSetProperty("allowMessageBodySerialization", allowMessageBodySerialization);
+        default RabbitMQEndpointProducerBuilder transacted(boolean transacted) {
+            doSetProperty("transacted", transacted);
             return this;
         }
         /**
-         * 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.
+         * Specifies whether to use transacted mode.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
          * 
          * Default: false
-         * Group: advanced
+         * Group: transaction
          * 
-         * @param allowMessageBodySerialization the value to set
+         * @param transacted the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder allowMessageBodySerialization(
-                String allowMessageBodySerialization) {
-            doSetProperty("allowMessageBodySerialization", allowMessageBodySerialization);
+        default RabbitMQEndpointProducerBuilder transacted(String transacted) {
+            doSetProperty("transacted", transacted);
             return this;
         }
+    }
+
+    /**
+     * Advanced builder for endpoint producers for the Spring RabbitMQ
+     * component.
+     */
+    public interface AdvancedRabbitMQEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default RabbitMQEndpointProducerBuilder basic() {
+            return (RabbitMQEndpointProducerBuilder) this;
+        }
         /**
          * 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:
+         * different prefix is required for each element: arg.exchange.
+         * arg.queue. arg.binding. arg.dlq.exchange. arg.dlq.queue.
          * arg.dlq.binding. For example to declare a queue with message ttl
-         * argument:
-         * http://localhost:5672/exchange/queueargs=arg.queue.x-message-ttl=60000.
+         * argument: args=arg.queue.x-message-ttl=60000.
          * 
          * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
          * java.lang.Object&amp;gt;&lt;/code&gt; type.
@@ -4008,17 +944,18 @@ public interface RabbitMQEndpointBuilderFactory {
          * @param value the option value
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder args(String key, Object value) {
+        default AdvancedRabbitMQEndpointProducerBuilder args(
+                String key,
+                Object value) {
             doSetMultiValueProperty("args", "arg." + key, value);
             return this;
         }
         /**
          * 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:
+         * different prefix is required for each element: arg.exchange.
+         * arg.queue. arg.binding. arg.dlq.exchange. arg.dlq.queue.
          * arg.dlq.binding. For example to declare a queue with message ttl
-         * argument:
-         * http://localhost:5672/exchange/queueargs=arg.queue.x-message-ttl=60000.
+         * argument: args=arg.queue.x-message-ttl=60000.
          * 
          * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
          * java.lang.Object&amp;gt;&lt;/code&gt; type.
@@ -4031,392 +968,434 @@ public interface RabbitMQEndpointBuilderFactory {
          * @param values the values
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder args(Map values) {
+        default AdvancedRabbitMQEndpointProducerBuilder args(Map values) {
             doSetMultiValueProperties("args", "arg.", values);
             return this;
         }
         /**
-         * Connection client properties (client info used in negotiating with
-         * the server).
+         * To use a custom MessageConverter so you can be in control how to map
+         * to/from a org.springframework.amqp.core.Message.
          * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
          * 
          * Group: advanced
          * 
-         * @param clientProperties the value to set
+         * @param messageConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder clientProperties(
-                Map<String, Object> clientProperties) {
-            doSetProperty("clientProperties", clientProperties);
+        default AdvancedRabbitMQEndpointProducerBuilder messageConverter(
+                Object messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
             return this;
         }
         /**
-         * Connection client properties (client info used in negotiating with
-         * the server).
+         * To use a custom MessageConverter so you can be in control how to map
+         * to/from a org.springframework.amqp.core.Message.
          * 
          * The option will be converted to a
-         * &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * &lt;code&gt;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
          * 
          * Group: advanced
          * 
-         * @param clientProperties the value to set
+         * @param messageConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder clientProperties(
-                String clientProperties) {
-            doSetProperty("clientProperties", clientProperties);
+        default AdvancedRabbitMQEndpointProducerBuilder messageConverter(
+                String messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
             return this;
         }
         /**
-         * Custom rabbitmq ExceptionHandler for ConnectionFactory.
+         * To use a custom MessagePropertiesConverter so you can be in control
+         * how to map to/from a org.springframework.amqp.core.MessageProperties.
          * 
          * The option is a:
-         * &lt;code&gt;com.rabbitmq.client.ExceptionHandler&lt;/code&gt; type.
+         * &lt;code&gt;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
          * 
          * Group: advanced
          * 
-         * @param connectionFactoryExceptionHandler the value to set
+         * @param messagePropertiesConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder connectionFactoryExceptionHandler(
-                Object connectionFactoryExceptionHandler) {
-            doSetProperty("connectionFactoryExceptionHandler", connectionFactoryExceptionHandler);
+        default AdvancedRabbitMQEndpointProducerBuilder messagePropertiesConverter(
+                Object messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
             return this;
         }
         /**
-         * Custom rabbitmq ExceptionHandler for ConnectionFactory.
+         * To use a custom MessagePropertiesConverter so you can be in control
+         * how to map to/from a org.springframework.amqp.core.MessageProperties.
          * 
          * The option will be converted to a
-         * &lt;code&gt;com.rabbitmq.client.ExceptionHandler&lt;/code&gt; type.
+         * &lt;code&gt;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
          * 
          * Group: advanced
          * 
-         * @param connectionFactoryExceptionHandler the value to set
+         * @param messagePropertiesConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder connectionFactoryExceptionHandler(
-                String connectionFactoryExceptionHandler) {
-            doSetProperty("connectionFactoryExceptionHandler", connectionFactoryExceptionHandler);
+        default AdvancedRabbitMQEndpointProducerBuilder messagePropertiesConverter(
+                String messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
             return this;
         }
         /**
-         * Connection timeout.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: 60000
+         * Default: false
          * Group: advanced
          * 
-         * @param connectionTimeout the value to set
+         * @param synchronous the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder connectionTimeout(
-                int connectionTimeout) {
-            doSetProperty("connectionTimeout", connectionTimeout);
+        default AdvancedRabbitMQEndpointProducerBuilder synchronous(
+                boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * Connection timeout.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
          * 
-         * Default: 60000
+         * Default: false
          * Group: advanced
          * 
-         * @param connectionTimeout the value to set
+         * @param synchronous the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder connectionTimeout(
-                String connectionTimeout) {
-            doSetProperty("connectionTimeout", connectionTimeout);
+        default AdvancedRabbitMQEndpointProducerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
+    }
+
+    /**
+     * Builder for endpoint for the Spring RabbitMQ component.
+     */
+    public interface RabbitMQEndpointBuilder
+            extends
+                RabbitMQEndpointConsumerBuilder,
+                RabbitMQEndpointProducerBuilder {
+        default AdvancedRabbitMQEndpointBuilder advanced() {
+            return (AdvancedRabbitMQEndpointBuilder) this;
+        }
         /**
-         * Network recovery interval in milliseconds (interval used when
-         * recovering from network failure).
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
          * 
-         * Default: 5000
-         * Group: advanced
+         * Group: common
          * 
-         * @param networkRecoveryInterval the value to set
+         * @param connectionFactory the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder networkRecoveryInterval(
-                Integer networkRecoveryInterval) {
-            doSetProperty("networkRecoveryInterval", networkRecoveryInterval);
+        default RabbitMQEndpointBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
             return this;
         }
         /**
-         * Network recovery interval in milliseconds (interval used when
-         * recovering from network failure).
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
          * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
+         * &lt;code&gt;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
          * 
-         * Default: 5000
-         * Group: advanced
+         * Group: common
          * 
-         * @param networkRecoveryInterval the value to set
+         * @param connectionFactory the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder networkRecoveryInterval(
-                String networkRecoveryInterval) {
-            doSetProperty("networkRecoveryInterval", networkRecoveryInterval);
+        default RabbitMQEndpointBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
             return this;
         }
         /**
-         * Connection requested channel max (max number of channels offered).
+         * Specifies whether Camel ignores the ReplyTo header in messages. If
+         * true, Camel does not send a reply back to the destination specified
+         * in the ReplyTo header. You can use this option if you want Camel to
+         * consume from a route and you do not want Camel to automatically send
+         * back a reply message because another component in your code handles
+         * the reply message. You can also use this option if you want to use
+         * Camel as a proxy between different message brokers and you want to
+         * route message from one system to another.
          * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: 2047
-         * Group: advanced
+         * Default: false
+         * Group: common
          * 
-         * @param requestedChannelMax the value to set
+         * @param disableReplyTo the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestedChannelMax(
-                int requestedChannelMax) {
-            doSetProperty("requestedChannelMax", requestedChannelMax);
+        default RabbitMQEndpointBuilder disableReplyTo(boolean disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
         /**
-         * Connection requested channel max (max number of channels offered).
+         * Specifies whether Camel ignores the ReplyTo header in messages. If
+         * true, Camel does not send a reply back to the destination specified
+         * in the ReplyTo header. You can use this option if you want Camel to
+         * consume from a route and you do not want Camel to automatically send
+         * back a reply message because another component in your code handles
+         * the reply message. You can also use this option if you want to use
+         * Camel as a proxy between different message brokers and you want to
+         * route message from one system to another.
          * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
          * 
-         * Default: 2047
-         * Group: advanced
+         * Default: false
+         * Group: common
          * 
-         * @param requestedChannelMax the value to set
+         * @param disableReplyTo the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestedChannelMax(
-                String requestedChannelMax) {
-            doSetProperty("requestedChannelMax", requestedChannelMax);
+        default RabbitMQEndpointBuilder disableReplyTo(String disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
         /**
-         * Connection requested frame max (max size of frame offered).
+         * Routing key.
          * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Default: 0
-         * Group: advanced
+         * Group: common
          * 
-         * @param requestedFrameMax the value to set
+         * @param routingKey the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestedFrameMax(
-                int requestedFrameMax) {
-            doSetProperty("requestedFrameMax", requestedFrameMax);
+        default RabbitMQEndpointBuilder routingKey(String routingKey) {
+            doSetProperty("routingKey", routingKey);
             return this;
         }
         /**
-         * Connection requested frame max (max size of frame offered).
+         * Specifies whether to test the connection on startup. This ensures
+         * that when Camel starts that all the JMS consumers have a valid
+         * connection to the JMS broker. If a connection cannot be granted then
+         * Camel throws an exception on startup. This ensures that Camel is not
+         * started with failed connections. The JMS producers is tested as well.
          * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: 0
-         * Group: advanced
+         * Default: false
+         * Group: common
          * 
-         * @param requestedFrameMax the value to set
+         * @param testConnectionOnStartup the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestedFrameMax(
-                String requestedFrameMax) {
-            doSetProperty("requestedFrameMax", requestedFrameMax);
+        default RabbitMQEndpointBuilder testConnectionOnStartup(
+                boolean testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
             return this;
         }
         /**
-         * Connection requested heartbeat (heart-beat in seconds offered).
+         * Specifies whether to test the connection on startup. This ensures
+         * that when Camel starts that all the JMS consumers have a valid
+         * connection to the JMS broker. If a connection cannot be granted then
+         * Camel throws an exception on startup. This ensures that Camel is not
+         * started with failed connections. The JMS producers is tested as well.
          * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
          * 
-         * Default: 60
-         * Group: advanced
+         * Default: false
+         * Group: common
          * 
-         * @param requestedHeartbeat the value to set
+         * @param testConnectionOnStartup the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestedHeartbeat(
-                int requestedHeartbeat) {
-            doSetProperty("requestedHeartbeat", requestedHeartbeat);
+        default RabbitMQEndpointBuilder testConnectionOnStartup(
+                String testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
             return this;
         }
         /**
-         * Connection requested heartbeat (heart-beat in seconds offered).
+         * Specifies whether to use transacted mode.
          * 
-         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: 60
-         * Group: advanced
+         * Default: false
+         * Group: transaction
          * 
-         * @param requestedHeartbeat the value to set
+         * @param transacted the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestedHeartbeat(
-                String requestedHeartbeat) {
-            doSetProperty("requestedHeartbeat", requestedHeartbeat);
+        default RabbitMQEndpointBuilder transacted(boolean transacted) {
+            doSetProperty("transacted", transacted);
             return this;
         }
         /**
-         * Set timeout for waiting for a reply when using the InOut Exchange
-         * Pattern (in milliseconds).
+         * Specifies whether to use transacted mode.
          * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
          * 
-         * Default: 20000
-         * Group: advanced
+         * Default: false
+         * Group: transaction
          * 
-         * @param requestTimeout the value to set
+         * @param transacted the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestTimeout(
-                long requestTimeout) {
-            doSetProperty("requestTimeout", requestTimeout);
+        default RabbitMQEndpointBuilder transacted(String transacted) {
+            doSetProperty("transacted", transacted);
             return this;
         }
-        /**
-         * Set timeout for waiting for a reply when using the InOut Exchange
-         * Pattern (in milliseconds).
-         * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
-         * 
-         * Default: 20000
-         * Group: advanced
-         * 
-         * @param requestTimeout the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRabbitMQEndpointBuilder requestTimeout(
-                String requestTimeout) {
-            doSetProperty("requestTimeout", requestTimeout);
-            return this;
+    }
+
+    /**
+     * Advanced builder for endpoint for the Spring RabbitMQ component.
+     */
+    public interface AdvancedRabbitMQEndpointBuilder
+            extends
+                AdvancedRabbitMQEndpointConsumerBuilder,
+                AdvancedRabbitMQEndpointProducerBuilder {
+        default RabbitMQEndpointBuilder basic() {
+            return (RabbitMQEndpointBuilder) this;
         }
         /**
-         * Set requestTimeoutCheckerInterval for inOut exchange.
+         * Specify arguments for configuring the different RabbitMQ concepts, a
+         * different prefix is required for each element: arg.exchange.
+         * arg.queue. arg.binding. arg.dlq.exchange. arg.dlq.queue.
+         * arg.dlq.binding. For example to declare a queue with message ttl
+         * argument: args=arg.queue.x-message-ttl=60000.
          * 
-         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
+         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * The option is multivalued, and you can use the args(String, Object)
+         * method to add a value (call the method multiple times to set more
+         * values).
          * 
-         * Default: 1000
          * Group: advanced
          * 
-         * @param requestTimeoutCheckerInterval the value to set
+         * @param key the option key
+         * @param value the option value
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestTimeoutCheckerInterval(
-                long requestTimeoutCheckerInterval) {
-            doSetProperty("requestTimeoutCheckerInterval", requestTimeoutCheckerInterval);
+        default AdvancedRabbitMQEndpointBuilder args(String key, Object value) {
+            doSetMultiValueProperty("args", "arg." + key, value);
             return this;
         }
         /**
-         * Set requestTimeoutCheckerInterval for inOut exchange.
+         * Specify arguments for configuring the different RabbitMQ concepts, a
+         * different prefix is required for each element: arg.exchange.
+         * arg.queue. arg.binding. arg.dlq.exchange. arg.dlq.queue.
+         * arg.dlq.binding. For example to declare a queue with message ttl
+         * argument: args=arg.queue.x-message-ttl=60000.
          * 
-         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
+         * java.lang.Object&amp;gt;&lt;/code&gt; type.
+         * The option is multivalued, and you can use the args(String, Object)
+         * method to add a value (call the method multiple times to set more
+         * values).
          * 
-         * Default: 1000
          * Group: advanced
          * 
-         * @param requestTimeoutCheckerInterval the value to set
+         * @param values the values
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder requestTimeoutCheckerInterval(
-                String requestTimeoutCheckerInterval) {
-            doSetProperty("requestTimeoutCheckerInterval", requestTimeoutCheckerInterval);
+        default AdvancedRabbitMQEndpointBuilder args(Map values) {
+            doSetMultiValueProperties("args", "arg.", values);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * To use a custom MessageConverter so you can be in control how to map
+         * to/from a org.springframework.amqp.core.Message.
          * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
          * 
-         * Default: false
          * Group: advanced
          * 
-         * @param synchronous the value to set
+         * @param messageConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder synchronous(boolean synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedRabbitMQEndpointBuilder messageConverter(
+                Object messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
             return this;
         }
         /**
-         * Sets whether synchronous processing should be strictly used, or Camel
-         * is allowed to use asynchronous processing (if supported).
+         * To use a custom MessageConverter so you can be in control how to map
+         * to/from a org.springframework.amqp.core.Message.
          * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
+         * The option will be converted to a
+         * &lt;code&gt;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
          * 
-         * Default: false
          * Group: advanced
          * 
-         * @param synchronous the value to set
+         * @param messageConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder synchronous(String synchronous) {
-            doSetProperty("synchronous", synchronous);
+        default AdvancedRabbitMQEndpointBuilder messageConverter(
+                String messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
             return this;
         }
         /**
-         * Enables connection topology recovery (should topology recovery be
-         * performed).
+         * To use a custom MessagePropertiesConverter so you can be in control
+         * how to map to/from a org.springframework.amqp.core.MessageProperties.
          * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
          * 
          * Group: advanced
          * 
-         * @param topologyRecoveryEnabled the value to set
+         * @param messagePropertiesConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder topologyRecoveryEnabled(
-                Boolean topologyRecoveryEnabled) {
-            doSetProperty("topologyRecoveryEnabled", topologyRecoveryEnabled);
+        default AdvancedRabbitMQEndpointBuilder messagePropertiesConverter(
+                Object messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
             return this;
         }
         /**
-         * Enables connection topology recovery (should topology recovery be
-         * performed).
+         * To use a custom MessagePropertiesConverter so you can be in control
+         * how to map to/from a org.springframework.amqp.core.MessageProperties.
          * 
          * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * &lt;code&gt;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
          * 
          * Group: advanced
          * 
-         * @param topologyRecoveryEnabled the value to set
+         * @param messagePropertiesConverter the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder topologyRecoveryEnabled(
-                String topologyRecoveryEnabled) {
-            doSetProperty("topologyRecoveryEnabled", topologyRecoveryEnabled);
+        default AdvancedRabbitMQEndpointBuilder messagePropertiesConverter(
+                String messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
             return this;
         }
         /**
-         * When true and an inOut Exchange failed on the consumer side send the
-         * caused Exception back in the response.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
          * Group: advanced
          * 
-         * @param transferException the value to set
+         * @param synchronous the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder transferException(
-                boolean transferException) {
-            doSetProperty("transferException", transferException);
+        default AdvancedRabbitMQEndpointBuilder synchronous(boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
         /**
-         * When true and an inOut Exchange failed on the consumer side send the
-         * caused Exception back in the response.
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -4424,59 +1403,60 @@ public interface RabbitMQEndpointBuilderFactory {
          * Default: false
          * Group: advanced
          * 
-         * @param transferException the value to set
+         * @param synchronous the value to set
          * @return the dsl builder
          */
-        default AdvancedRabbitMQEndpointBuilder transferException(
-                String transferException) {
-            doSetProperty("transferException", transferException);
+        default AdvancedRabbitMQEndpointBuilder synchronous(String synchronous) {
+            doSetProperty("synchronous", synchronous);
             return this;
         }
     }
 
     public interface RabbitMQBuilders {
         /**
-         * RabbitMQ (camel-rabbitmq)
-         * Send and receive messages from RabbitMQ instances.
+         * Spring RabbitMQ (camel-spring-rabbitmq)
+         * Send and receive messages from RabbitMQ using Spring RabbitMQ client.
          * 
          * Category: messaging
-         * Since: 2.12
-         * Maven coordinates: org.apache.camel:camel-rabbitmq
+         * Since: 3.8
+         * Maven coordinates: org.apache.camel:camel-spring-rabbitmq
          * 
-         * Syntax: <code>rabbitmq:exchangeName</code>
+         * Syntax: <code>spring-rabbitmq:exchangeName</code>
          * 
          * Path parameter: 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.
+         * determines the exchange the queue will be bound to. Note: to use
+         * default exchange then do not use empty name, but use default instead.
          * 
          * @param path exchangeName
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder rabbitmq(String path) {
-            return RabbitMQEndpointBuilderFactory.endpointBuilder("rabbitmq", path);
+        default RabbitMQEndpointBuilder springRabbitmq(String path) {
+            return RabbitMQEndpointBuilderFactory.endpointBuilder("spring-rabbitmq", path);
         }
         /**
-         * RabbitMQ (camel-rabbitmq)
-         * Send and receive messages from RabbitMQ instances.
+         * Spring RabbitMQ (camel-spring-rabbitmq)
+         * Send and receive messages from RabbitMQ using Spring RabbitMQ client.
          * 
          * Category: messaging
-         * Since: 2.12
-         * Maven coordinates: org.apache.camel:camel-rabbitmq
+         * Since: 3.8
+         * Maven coordinates: org.apache.camel:camel-spring-rabbitmq
          * 
-         * Syntax: <code>rabbitmq:exchangeName</code>
+         * Syntax: <code>spring-rabbitmq:exchangeName</code>
          * 
          * Path parameter: 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.
+         * determines the exchange the queue will be bound to. Note: to use
+         * default exchange then do not use empty name, but use default instead.
          * 
          * @param componentName to use a custom component name for the endpoint
          * instead of the default name
          * @param path exchangeName
          * @return the dsl builder
          */
-        default RabbitMQEndpointBuilder rabbitmq(
+        default RabbitMQEndpointBuilder springRabbitmq(
                 String componentName,
                 String path) {
             return RabbitMQEndpointBuilderFactory.endpointBuilder(componentName, path);
diff --git a/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc b/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc
index 15af0ff..d8d3a04 100644
--- a/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc
+++ b/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc
@@ -89,13 +89,14 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (21 parameters):
+=== Query Parameters (22 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
+| *disableReplyTo* (common) | Specifies whether Camel ignores the ReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the ReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message brokers and  [...]
 | *routingKey* (common) | Routing key. |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the consumer processes the Exchange asynchronously. If enabled then the consumer may pickup the next message from the queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the consumer will pickup the next message from the queue. | false | boolean