[camel] branch master updated: CAMEL-16003: camel-spring-rabbitmq - New component using spring client

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[camel] branch master updated: CAMEL-16003: camel-spring-rabbitmq - New component using spring client

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

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


The following commit(s) were added to refs/heads/master by this push:
     new d4f4c46  CAMEL-16003: camel-spring-rabbitmq - New component using spring client
d4f4c46 is described below

commit d4f4c46433e0bac60c61a4c41a9ba01441d0cd68
Author: Claus Ibsen <[hidden email]>
AuthorDate: Wed Jan 13 10:49:56 2021 +0100

    CAMEL-16003: camel-spring-rabbitmq - New component using spring client
---
 .../apache/camel/catalog/docs/minio-component.adoc |    2 +-
 .../catalog/docs/spring-rabbitmq-component.adoc    |    2 +-
 ...java => SpringRabbitMQComponentConfigurer.java} |    6 +-
 ....java => SpringRabbitMQEndpointConfigurer.java} |    6 +-
 ....java => SpringRabbitMQEndpointUriFactory.java} |    2 +-
 .../org/apache/camel/component/spring-rabbitmq     |    2 +-
 .../camel/configurer/spring-rabbitmq-component     |    2 +-
 .../camel/configurer/spring-rabbitmq-endpoint      |    2 +-
 .../org/apache/camel/send-dynamic/spring-rabbitmq  |    2 +-
 .../camel/urifactory/spring-rabbitmq-endpoint      |    2 +-
 .../component/springrabbit/spring-rabbitmq.json    |    2 +-
 .../src/main/docs/spring-rabbitmq-component.adoc   |   12 +-
 .../DefaultListenerContainerFactory.java           |    2 +-
 .../springrabbit/DefaultMessageConverter.java      |   65 +-
 .../DefaultMessagePropertiesConverter.java         |    8 +
 .../springrabbit/EndpointMessageListener.java      |   12 +-
 .../springrabbit/ListenerContainerFactory.java     |    2 +-
 .../component/springrabbit/RabbitMQConsumer.java   |    6 +-
 ...Component.java => SpringRabbitMQComponent.java} |    8 +-
 ...Constants.java => SpringRabbitMQConstants.java} |    4 +-
 ...MQEndpoint.java => SpringRabbitMQEndpoint.java} |   46 +-
 ...ava => SpringRabbitMQHeaderFilterStrategy.java} |   12 +-
 ...bbitMQHelper.java => SpringRabbitMQHelper.java} |    6 +-
 ...MQProducer.java => SpringRabbitMQProducer.java} |   22 +-
 ...re.java => SpringRabbitMQSendDynamicAware.java} |   14 +-
 .../integration/AbstractRabbitMQIntTest.java       |    4 +-
 .../integration/RabbitMQConsumerQueuesIntTest.java |    2 +
 .../integration/RabbitMQProducerIntTest.java       |   27 +
 .../dsl/SpringRabbitmqComponentBuilderFactory.java |   50 +-
 .../src/generated/resources/metadata.json          |    2 +-
 .../builder/endpoint/EndpointBuilderFactory.java   |    1 +
 .../camel/builder/endpoint/EndpointBuilders.java   |    1 +
 .../builder/endpoint/StaticEndpointBuilders.java   |    8 +-
 .../dsl/SpringRabbitMQEndpointBuilderFactory.java  | 1571 ++++++++++++++++++++
 .../modules/ROOT/pages/minio-component.adoc        |    2 +-
 .../ROOT/pages/spring-rabbitmq-component.adoc      |    2 +-
 36 files changed, 1793 insertions(+), 126 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/minio-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/minio-component.adoc
index 69f089f..22c4f5b 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/minio-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/minio-component.adoc
@@ -506,4 +506,4 @@ Maven users will need to add the following dependency to their pom.xml.
 
 where `$\{camel-version}` must be replaced by the actual version of Camel.
 
-include::camel-spring-boot::page$minio-starter.adoc[]
\ No newline at end of file
+include::camel-spring-boot::page$minio-starter.adoc[]
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 2e60654..325afb2 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
@@ -167,7 +167,7 @@ to("spring-rabbitmq:default?routingKey=foo")
 Before you can send or receive messages from RabbitMQ, then exchanges, queues and bindings must be setup first.
 
 In development mode it may be desirable to let Camel automatic do this.
-You can enable this by setting `autoDeclare=true` on the `RabbitMQComponent`.
+You can enable this by setting `autoDeclare=true` on the `SpringRabbitMQComponent`.
 
 Then Spring RabbitMQ will automatic necessary declare the elements and setup the binding between the exchange, queue and routing keys.
 
diff --git a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQComponentConfigurer.java b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponentConfigurer.java
similarity index 96%
rename from components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQComponentConfigurer.java
rename to components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponentConfigurer.java
index 6bac8d0..492d6d5 100644
--- a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQComponentConfigurer.java
+++ b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponentConfigurer.java
@@ -15,11 +15,11 @@ import org.apache.camel.support.component.PropertyConfigurerSupport;
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class RabbitMQComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+public class SpringRabbitMQComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
-        RabbitMQComponent target = (RabbitMQComponent) obj;
+        SpringRabbitMQComponent target = (SpringRabbitMQComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "amqpadmin":
         case "amqpAdmin": target.setAmqpAdmin(property(camelContext, org.springframework.amqp.core.AmqpAdmin.class, value)); return true;
@@ -119,7 +119,7 @@ public class RabbitMQComponentConfigurer extends PropertyConfigurerSupport imple
 
     @Override
     public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
-        RabbitMQComponent target = (RabbitMQComponent) obj;
+        SpringRabbitMQComponent target = (SpringRabbitMQComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "amqpadmin":
         case "amqpAdmin": return target.getAmqpAdmin();
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/SpringRabbitMQEndpointConfigurer.java
similarity index 97%
rename from components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointConfigurer.java
rename to components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointConfigurer.java
index c44046b..9ba1913 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/SpringRabbitMQEndpointConfigurer.java
@@ -15,11 +15,11 @@ import org.apache.camel.support.component.PropertyConfigurerSupport;
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class RabbitMQEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+public class SpringRabbitMQEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
-        RabbitMQEndpoint target = (RabbitMQEndpoint) obj;
+        SpringRabbitMQEndpoint target = (SpringRabbitMQEndpoint) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "acknowledgemode":
         case "acknowledgeMode": target.setAcknowledgeMode(property(camelContext, org.springframework.amqp.core.AcknowledgeMode.class, value)); return true;
@@ -126,7 +126,7 @@ public class RabbitMQEndpointConfigurer extends PropertyConfigurerSupport implem
 
     @Override
     public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
-        RabbitMQEndpoint target = (RabbitMQEndpoint) obj;
+        SpringRabbitMQEndpoint target = (SpringRabbitMQEndpoint) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "acknowledgemode":
         case "acknowledgeMode": return target.getAcknowledgeMode();
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/SpringRabbitMQEndpointUriFactory.java
similarity index 94%
rename from components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/RabbitMQEndpointUriFactory.java
rename to components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointUriFactory.java
index 8bc18ee..0beffc3 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/SpringRabbitMQEndpointUriFactory.java
@@ -13,7 +13,7 @@ import org.apache.camel.spi.EndpointUriFactory;
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
-public class RabbitMQEndpointUriFactory extends org.apache.camel.support.component.EndpointUriFactorySupport implements EndpointUriFactory {
+public class SpringRabbitMQEndpointUriFactory extends org.apache.camel.support.component.EndpointUriFactorySupport implements EndpointUriFactory {
 
     private static final String BASE = ":exchangeName";
 
diff --git a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/component/spring-rabbitmq b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/component/spring-rabbitmq
index 72d5665..0fc810c 100644
--- a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/component/spring-rabbitmq
+++ b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/component/spring-rabbitmq
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.springrabbit.RabbitMQComponent
+class=org.apache.camel.component.springrabbit.SpringRabbitMQComponent
diff --git a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-component b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-component
index ff82b11..68e08e5 100644
--- a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-component
+++ b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-component
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.springrabbit.RabbitMQComponentConfigurer
+class=org.apache.camel.component.springrabbit.SpringRabbitMQComponentConfigurer
diff --git a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-endpoint b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-endpoint
index 3aaff85..0096cef 100644
--- a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-endpoint
+++ b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/configurer/spring-rabbitmq-endpoint
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.springrabbit.RabbitMQEndpointConfigurer
+class=org.apache.camel.component.springrabbit.SpringRabbitMQEndpointConfigurer
diff --git a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/spring-rabbitmq b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/spring-rabbitmq
index 2122130..86e7acc 100644
--- a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/spring-rabbitmq
+++ b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/send-dynamic/spring-rabbitmq
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.springrabbit.RabbitMQSendDynamicAware
+class=org.apache.camel.component.springrabbit.SpringRabbitMQSendDynamicAware
diff --git a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/urifactory/spring-rabbitmq-endpoint b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/urifactory/spring-rabbitmq-endpoint
index c746621..318e202 100644
--- a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/urifactory/spring-rabbitmq-endpoint
+++ b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/services/org/apache/camel/urifactory/spring-rabbitmq-endpoint
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.springrabbit.RabbitMQEndpointUriFactory
+class=org.apache.camel.component.springrabbit.SpringRabbitMQEndpointUriFactory
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 34ab6b0..c66db3b 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
@@ -7,7 +7,7 @@
     "deprecated": false,
     "firstVersion": "3.8.0",
     "label": "messaging",
-    "javaType": "org.apache.camel.component.springrabbit.RabbitMQComponent",
+    "javaType": "org.apache.camel.component.springrabbit.SpringRabbitMQComponent",
     "supportLevel": "Preview",
     "groupId": "org.apache.camel",
     "artifactId": "camel-spring-rabbitmq",
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 2e60654..6e7200d 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
@@ -167,7 +167,7 @@ to("spring-rabbitmq:default?routingKey=foo")
 Before you can send or receive messages from RabbitMQ, then exchanges, queues and bindings must be setup first.
 
 In development mode it may be desirable to let Camel automatic do this.
-You can enable this by setting `autoDeclare=true` on the `RabbitMQComponent`.
+You can enable this by setting `autoDeclare=true` on the `SpringRabbitMQComponent`.
 
 Then Spring RabbitMQ will automatic necessary declare the elements and setup the binding between the exchange, queue and routing keys.
 
@@ -203,6 +203,16 @@ See details in the RabbitMQ documentation.
 You can also configure any additional `x-` arguments, such as the message time to live, via `x-message-ttl`, and many others.
 See details in the RabbitMQ documentation.
 
+== Mapping from Camel to RabbitMQ
+
+The message body is mapped from Camel Message body to a `byte[]` which is the type that RabbitMQ uses for message body.
+Camel wil use its type converter to convert the message body to byte array.
+
+Spring Rabbit comes out of the box with support for mapping Java serialized objects but Camel Spring RabbitMQ
+does *not* support this due to security vulnerabilities and using Java objects is a bad design as it enforces strong coupling.
+
+Custom message headers is mapped from Camel Message headers to RabbitMQ headers. This behaviour can be customized by configuring
+a new implementation of `HeaderFilterStrategy` on the Camel component.
 
 == Request / Reply
 
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultListenerContainerFactory.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultListenerContainerFactory.java
index c0486a1..743c6a3 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultListenerContainerFactory.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultListenerContainerFactory.java
@@ -26,7 +26,7 @@ import org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer
 public class DefaultListenerContainerFactory implements ListenerContainerFactory {
 
     @Override
-    public AbstractMessageListenerContainer createListenerContainer(RabbitMQEndpoint endpoint) {
+    public AbstractMessageListenerContainer createListenerContainer(SpringRabbitMQEndpoint endpoint) {
         DefaultMessageListenerContainer listener = new DefaultMessageListenerContainer(endpoint.getConnectionFactory());
         if (endpoint.getQueues() != null) {
             listener.setQueueNames(endpoint.getQueues().split(","));
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessageConverter.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessageConverter.java
index ff70d2c..e87087b 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessageConverter.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessageConverter.java
@@ -16,16 +16,19 @@
  */
 package org.apache.camel.component.springrabbit;
 
-import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.NoTypeConversionAvailableException;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.support.converter.AbstractMessageConverter;
 import org.springframework.amqp.support.converter.MessageConversionException;
-import org.springframework.amqp.support.converter.SimpleMessageConverter;
 
-public class DefaultMessageConverter extends SimpleMessageConverter {
+public class DefaultMessageConverter extends AbstractMessageConverter {
 
+    private final String defaultCharset = Charset.defaultCharset().name();
     private final CamelContext camelContext;
 
     public DefaultMessageConverter(CamelContext camelContext) {
@@ -34,16 +37,54 @@ public class DefaultMessageConverter extends SimpleMessageConverter {
 
     @Override
     public Message createMessage(Object body, MessageProperties messageProperties) throws MessageConversionException {
-        if (body instanceof String || body instanceof byte[] || body instanceof Serializable) {
-            return super.createMessage(body, messageProperties);
+        boolean text = body instanceof String;
+        byte[] data;
+        try {
+            if (body instanceof String) {
+                String encoding = messageProperties.getContentEncoding();
+                if (encoding != null) {
+                    data = ((String) body).getBytes(encoding);
+                } else {
+                    data = ((String) body).getBytes(defaultCharset);
+                    messageProperties.setContentEncoding(defaultCharset);
+                }
+            } else {
+                data = camelContext.getTypeConverter().mandatoryConvertTo(byte[].class, body);
+            }
+        } catch (NoTypeConversionAvailableException | UnsupportedEncodingException e) {
+            throw new MessageConversionException(
+                    "failed to convert to byte[] for rabbitmq message", e);
         }
-        // favour byte[] at first
-        Object data = camelContext.getTypeConverter().convertTo(byte[].class, body);
-        if (data != null) {
-            return super.createMessage(data, messageProperties);
-        } else {
-            data = camelContext.getTypeConverter().convertTo(String.class, body);
-            return super.createMessage(data, messageProperties);
+        messageProperties.setContentLength(data.length);
+        Message answer = new Message(data, messageProperties);
+        if (MessageProperties.DEFAULT_CONTENT_TYPE.equals(messageProperties.getContentType()) && text) {
+            messageProperties.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN);
         }
+        return answer;
+    }
+
+    @Override
+    public Object fromMessage(Message message) throws MessageConversionException {
+        Object content = null;
+        MessageProperties properties = message.getMessageProperties();
+        if (properties != null) {
+            String contentType = properties.getContentType();
+            if (contentType != null && contentType.startsWith("text")) {
+                String encoding = properties.getContentEncoding();
+                if (encoding == null) {
+                    encoding = defaultCharset;
+                }
+                try {
+                    content = new String(message.getBody(), encoding);
+                } catch (UnsupportedEncodingException e) {
+                    throw new MessageConversionException(
+                            "failed to convert text-based Message content", e);
+                }
+            }
+        }
+        if (content == null) {
+            content = message.getBody();
+        }
+        return content;
     }
 }
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessagePropertiesConverter.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessagePropertiesConverter.java
index 3151c74..87ebc52 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessagePropertiesConverter.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/DefaultMessagePropertiesConverter.java
@@ -23,6 +23,7 @@ import java.util.Set;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.support.ExchangeHelper;
 import org.springframework.amqp.core.MessageProperties;
 
 public class DefaultMessagePropertiesConverter implements MessagePropertiesConverter {
@@ -38,6 +39,10 @@ public class DefaultMessagePropertiesConverter implements MessagePropertiesConve
     @Override
     public MessageProperties toMessageProperties(Exchange exchange) {
         MessageProperties answer = new MessageProperties();
+        String contentType = ExchangeHelper.getContentType(exchange);
+        if (contentType != null) {
+            answer.setContentType(contentType);
+        }
 
         Set<Map.Entry<String, Object>> entries = exchange.getMessage().getHeaders().entrySet();
         for (Map.Entry<String, Object> entry : entries) {
@@ -60,6 +65,9 @@ public class DefaultMessagePropertiesConverter implements MessagePropertiesConve
                 Object headerValue = entry.getValue();
                 appendInputHeader(answer, headerName, headerValue, exchange);
             }
+            if (messageProperties.getContentType() != null) {
+                answer.put(Exchange.CONTENT_TYPE, messageProperties.getContentType());
+            }
         }
 
         return answer;
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 ed15da2..db93a63 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
@@ -39,13 +39,13 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(EndpointMessageListener.class);
 
-    private final RabbitMQEndpoint endpoint;
+    private final SpringRabbitMQEndpoint endpoint;
     private final AsyncProcessor processor;
     private RabbitTemplate template;
     private boolean disableReplyTo;
     private boolean async;
 
-    public EndpointMessageListener(RabbitMQEndpoint endpoint, Processor processor) {
+    public EndpointMessageListener(SpringRabbitMQEndpoint endpoint, Processor processor) {
         this.endpoint = endpoint;
         this.processor = AsyncProcessorConverterHelper.convert(processor);
     }
@@ -149,7 +149,7 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
 
     protected Exchange createExchange(Message message, Channel channel, Object replyDestination) {
         Exchange exchange = endpoint.createExchange(message);
-        exchange.setProperty(RabbitMQConstants.CHANNEL, channel);
+        exchange.setProperty(SpringRabbitMQConstants.CHANNEL, channel);
 
         // lets set to an InOut if we have some kind of reply-to destination
         if (replyDestination != null && !disableReplyTo) {
@@ -168,11 +168,11 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
 
         private final Message message;
         private final Exchange exchange;
-        private final RabbitMQEndpoint endpoint;
+        private final SpringRabbitMQEndpoint endpoint;
         private final boolean sendReply;
         private final Address replyDestination;
 
-        private EndpointMessageListenerAsyncCallback(Message message, Exchange exchange, RabbitMQEndpoint endpoint,
+        private EndpointMessageListenerAsyncCallback(Message message, Exchange exchange, SpringRabbitMQEndpoint endpoint,
                                                      boolean sendReply, Address replyDestination) {
             this.message = message;
             this.exchange = exchange;
@@ -257,6 +257,8 @@ public class EndpointMessageListener implements ChannelAwareMessageListener {
                 msg = endpoint.getMessageConverter().toMessage(body, mp);
             }
 
+            // TODO: Exchange.CONTENT_TYPE
+
             // send reply back
             if (LOG.isDebugEnabled()) {
                 LOG.debug("{} sending reply message [correlationId:{}]: {}", endpoint, cid, msg);
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/ListenerContainerFactory.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/ListenerContainerFactory.java
index a9e94c7..1aada26 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/ListenerContainerFactory.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/ListenerContainerFactory.java
@@ -29,5 +29,5 @@ public interface ListenerContainerFactory {
      * @param  endpoint the endpoint
      * @return          the created and configured listener container
      */
-    AbstractMessageListenerContainer createListenerContainer(RabbitMQEndpoint endpoint);
+    AbstractMessageListenerContainer createListenerContainer(SpringRabbitMQEndpoint endpoint);
 }
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 0a476f4..773a861 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
@@ -42,8 +42,8 @@ public class RabbitMQConsumer extends DefaultConsumer implements Suspendable {
     }
 
     @Override
-    public RabbitMQEndpoint getEndpoint() {
-        return (RabbitMQEndpoint) super.getEndpoint();
+    public SpringRabbitMQEndpoint getEndpoint() {
+        return (SpringRabbitMQEndpoint) super.getEndpoint();
     }
 
     public EndpointMessageListener getEndpointMessageListener() {
@@ -53,7 +53,7 @@ public class RabbitMQConsumer extends DefaultConsumer implements Suspendable {
         return messageListener;
     }
 
-    protected void createMessageListener(RabbitMQEndpoint endpoint, Processor processor) {
+    protected void createMessageListener(SpringRabbitMQEndpoint endpoint, Processor processor) {
         messageListener = new EndpointMessageListener(endpoint, processor);
         endpoint.configureMessageListener(messageListener);
     }
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQComponent.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponent.java
similarity index 97%
rename from components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQComponent.java
rename to components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponent.java
index e572332..002aaef 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQComponent.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponent.java
@@ -29,12 +29,12 @@ import org.springframework.amqp.rabbit.connection.ConnectionFactory;
 import org.springframework.amqp.support.converter.MessageConverter;
 import org.springframework.util.ErrorHandler;
 
-import static org.apache.camel.component.springrabbit.RabbitMQEndpoint.ARG_PREFIX;
+import static org.apache.camel.component.springrabbit.SpringRabbitMQEndpoint.ARG_PREFIX;
 import static org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.DEFAULT_PREFETCH_COUNT;
 import static org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.DEFAULT_SHUTDOWN_TIMEOUT;
 
 @Component("spring-rabbitmq")
-public class RabbitMQComponent extends HeaderFilterStrategyComponent {
+public class SpringRabbitMQComponent extends HeaderFilterStrategyComponent {
 
     @Metadata(autowired = true,
               description = "The connection factory to be use. A connection factory must be configured either on the component or endpoint.")
@@ -95,7 +95,7 @@ public class RabbitMQComponent extends HeaderFilterStrategyComponent {
         super.doInit();
 
         if (getHeaderFilterStrategy() == null) {
-            setHeaderFilterStrategy(new RabbitMQHeaderFilterStrategy());
+            setHeaderFilterStrategy(new SpringRabbitMQHeaderFilterStrategy());
         }
         if (messageConverter == null) {
             messageConverter = new DefaultMessageConverter(getCamelContext());
@@ -107,7 +107,7 @@ public class RabbitMQComponent extends HeaderFilterStrategyComponent {
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-        RabbitMQEndpoint endpoint = new RabbitMQEndpoint(uri, this, remaining);
+        SpringRabbitMQEndpoint endpoint = new SpringRabbitMQEndpoint(uri, this, remaining);
         endpoint.setConnectionFactory(connectionFactory);
         endpoint.setTestConnectionOnStartup(testConnectionOnStartup);
         endpoint.setMessageConverter(messageConverter);
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQConstants.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQConstants.java
similarity index 95%
rename from components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQConstants.java
rename to components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQConstants.java
index 76a859d..da65baf 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQConstants.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQConstants.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.springrabbit;
 
-public final class RabbitMQConstants {
+public final class SpringRabbitMQConstants {
 
     public static final String DEFAULT_EXCHANGE_NAME = "default";
 
@@ -34,7 +34,7 @@ public final class RabbitMQConstants {
     public static final String EXPIRES = "x-expires";
     public static final String SINGLE_ACTIVE_CONSUMER = "x-single-active-consumer";
 
-    private RabbitMQConstants() {
+    private SpringRabbitMQConstants() {
         // Constants class
     }
 }
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/SpringRabbitMQEndpoint.java
similarity index 93%
rename from components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQEndpoint.java
rename to components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
index 829ac33..8529a95 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/SpringRabbitMQEndpoint.java
@@ -52,7 +52,7 @@ import org.springframework.amqp.support.converter.MessageConverter;
 @UriEndpoint(firstVersion = "3.8.0", scheme = "spring-rabbitmq", title = "Spring RabbitMQ",
              syntax = "spring-rabbitmq:exchangeName",
              category = { Category.MESSAGING })
-public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
+public class SpringRabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
 
     public static final String ARG_PREFIX = "arg.";
     public static final String CONSUMER_ARG_PREFIX = "consumer.";
@@ -63,7 +63,7 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
     public static final String DLQ_QUEUE_ARG_PREFIX = "dlq.queue.";
     public static final String DLQ_BINDING_PREFIX = "dlq.binding.";
 
-    private static final Logger LOG = LoggerFactory.getLogger(RabbitMQEndpoint.class);
+    private static final Logger LOG = LoggerFactory.getLogger(SpringRabbitMQEndpoint.class);
 
     @UriPath
     @Metadata(required = true,
@@ -148,14 +148,14 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
                             + " The default value is 5 seconds. A negative value indicates an indefinite timeout.")
     private long replyTimeout = 5000;
 
-    public RabbitMQEndpoint(String endpointUri, Component component, String exchangeName) {
+    public SpringRabbitMQEndpoint(String endpointUri, Component component, String exchangeName) {
         super(endpointUri, component);
         this.exchangeName = exchangeName;
     }
 
     @Override
-    public RabbitMQComponent getComponent() {
-        return (RabbitMQComponent) super.getComponent();
+    public SpringRabbitMQComponent getComponent() {
+        return (SpringRabbitMQComponent) super.getComponent();
     }
 
     public String getExchangeName() {
@@ -332,7 +332,7 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
 
     @Override
     public Producer createProducer() throws Exception {
-        return new RabbitMQProducer(this);
+        return new SpringRabbitMQProducer(this);
     }
 
     public Exchange createExchange(Message message) {
@@ -487,7 +487,7 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
                          + "reopening the connection.");
             }
 
-            String en = RabbitMQHelper.isDefaultExchange(getExchangeName()) ? "" : getExchangeName();
+            String en = SpringRabbitMQHelper.isDefaultExchange(getExchangeName()) ? "" : getExchangeName();
             ExchangeBuilder eb = new ExchangeBuilder(en, getExchangeType());
             eb.durable(durable);
             if (autoDelete) {
@@ -566,42 +566,42 @@ public class RabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
 
     private void prepareDeadLetterQueueArgs(Map<String, Object> args) {
         if (deadLetterExchange != null) {
-            args.put(RabbitMQConstants.DEAD_LETTER_EXCHANGE, deadLetterExchange);
+            args.put(SpringRabbitMQConstants.DEAD_LETTER_EXCHANGE, deadLetterExchange);
             if (deadLetterRoutingKey != null) {
-                args.put(RabbitMQConstants.DEAD_LETTER_ROUTING_KEY, deadLetterRoutingKey);
+                args.put(SpringRabbitMQConstants.DEAD_LETTER_ROUTING_KEY, deadLetterRoutingKey);
             }
         }
     }
 
     private void prepareArgs(Map<String, Object> args) {
         // some arguments must be in numeric values so we need to fix this
-        Object arg = args.get(RabbitMQConstants.MAX_LENGTH);
+        Object arg = args.get(SpringRabbitMQConstants.MAX_LENGTH);
         if (arg instanceof String) {
-            args.put(RabbitMQConstants.MAX_LENGTH, Long.parseLong((String) arg));
+            args.put(SpringRabbitMQConstants.MAX_LENGTH, Long.parseLong((String) arg));
         }
-        arg = args.get(RabbitMQConstants.MAX_LENGTH_BYTES);
+        arg = args.get(SpringRabbitMQConstants.MAX_LENGTH_BYTES);
         if (arg instanceof String) {
-            args.put(RabbitMQConstants.MAX_LENGTH_BYTES, Long.parseLong((String) arg));
+            args.put(SpringRabbitMQConstants.MAX_LENGTH_BYTES, Long.parseLong((String) arg));
         }
-        arg = args.get(RabbitMQConstants.MAX_PRIORITY);
+        arg = args.get(SpringRabbitMQConstants.MAX_PRIORITY);
         if (arg instanceof String) {
-            args.put(RabbitMQConstants.MAX_PRIORITY, Integer.parseInt((String) arg));
+            args.put(SpringRabbitMQConstants.MAX_PRIORITY, Integer.parseInt((String) arg));
         }
-        arg = args.get(RabbitMQConstants.DELIVERY_LIMIT);
+        arg = args.get(SpringRabbitMQConstants.DELIVERY_LIMIT);
         if (arg instanceof String) {
-            args.put(RabbitMQConstants.DELIVERY_LIMIT, Integer.parseInt((String) arg));
+            args.put(SpringRabbitMQConstants.DELIVERY_LIMIT, Integer.parseInt((String) arg));
         }
-        arg = args.get(RabbitMQConstants.MESSAGE_TTL);
+        arg = args.get(SpringRabbitMQConstants.MESSAGE_TTL);
         if (arg instanceof String) {
-            args.put(RabbitMQConstants.MESSAGE_TTL, Long.parseLong((String) arg));
+            args.put(SpringRabbitMQConstants.MESSAGE_TTL, Long.parseLong((String) arg));
         }
-        arg = args.get(RabbitMQConstants.EXPIRES);
+        arg = args.get(SpringRabbitMQConstants.EXPIRES);
         if (arg instanceof String) {
-            args.put(RabbitMQConstants.EXPIRES, Long.parseLong((String) arg));
+            args.put(SpringRabbitMQConstants.EXPIRES, Long.parseLong((String) arg));
         }
-        arg = args.get(RabbitMQConstants.SINGLE_ACTIVE_CONSUMER);
+        arg = args.get(SpringRabbitMQConstants.SINGLE_ACTIVE_CONSUMER);
         if (arg instanceof String) {
-            args.put(RabbitMQConstants.SINGLE_ACTIVE_CONSUMER, Boolean.parseBoolean((String) arg));
+            args.put(SpringRabbitMQConstants.SINGLE_ACTIVE_CONSUMER, Boolean.parseBoolean((String) arg));
         }
     }
 
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQHeaderFilterStrategy.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQHeaderFilterStrategy.java
similarity index 69%
rename from components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQHeaderFilterStrategy.java
rename to components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQHeaderFilterStrategy.java
index bef1cd2..ffaa5a5 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQHeaderFilterStrategy.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQHeaderFilterStrategy.java
@@ -18,15 +18,19 @@ package org.apache.camel.component.springrabbit;
 
 import org.apache.camel.support.DefaultHeaderFilterStrategy;
 
-public class RabbitMQHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
+public class SpringRabbitMQHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
 
-    public RabbitMQHeaderFilterStrategy() {
+    public SpringRabbitMQHeaderFilterStrategy() {
         initialize();
     }
 
     protected void initialize() {
-        setOutFilterPattern("CamelRabbitmq.*");
-        setInFilterPattern("CamelRabbitmq.*");
+        this.getOutFilter().add("content-encoding");
+        this.getOutFilter().add("content-length");
+        this.getOutFilter().add("content-type");
+        this.setLowerCase(true);
+        this.setOutFilterPattern(CAMEL_FILTER_PATTERN);
+        this.setInFilterPattern(CAMEL_FILTER_PATTERN);
     }
 
 }
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQHelper.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQHelper.java
similarity index 85%
rename from components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQHelper.java
rename to components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQHelper.java
index 1c9b985..b1a4f71 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQHelper.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQHelper.java
@@ -16,13 +16,13 @@
  */
 package org.apache.camel.component.springrabbit;
 
-public final class RabbitMQHelper {
+public final class SpringRabbitMQHelper {
 
-    private RabbitMQHelper() {
+    private SpringRabbitMQHelper() {
     }
 
     public static boolean isDefaultExchange(String exchangeName) {
         return exchangeName == null || exchangeName.isEmpty()
-                || exchangeName.equalsIgnoreCase(RabbitMQConstants.DEFAULT_EXCHANGE_NAME);
+                || exchangeName.equalsIgnoreCase(SpringRabbitMQConstants.DEFAULT_EXCHANGE_NAME);
     }
 }
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/SpringRabbitMQProducer.java
similarity index 91%
rename from components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQProducer.java
rename to components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQProducer.java
index ea8e894..efae80a 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/SpringRabbitMQProducer.java
@@ -34,20 +34,20 @@ 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 {
+public class SpringRabbitMQProducer extends DefaultAsyncProducer {
 
-    private static final Logger LOG = LoggerFactory.getLogger(RabbitMQProducer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(SpringRabbitMQProducer.class);
 
     private RabbitTemplate inOnlyTemplate;
     private AsyncRabbitTemplate inOutTemplate;
 
-    public RabbitMQProducer(Endpoint endpoint) {
+    public SpringRabbitMQProducer(Endpoint endpoint) {
         super(endpoint);
     }
 
     @Override
-    public RabbitMQEndpoint getEndpoint() {
-        return (RabbitMQEndpoint) super.getEndpoint();
+    public SpringRabbitMQEndpoint getEndpoint() {
+        return (SpringRabbitMQEndpoint) super.getEndpoint();
     }
 
     public RabbitTemplate getInOnlyTemplate() {
@@ -125,13 +125,13 @@ 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);
+        String exchangeName = (String) exchange.getMessage().removeHeader(SpringRabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
         if (exchangeName == null) {
             exchangeName = getEndpoint().getExchangeName();
         }
-        exchangeName = RabbitMQHelper.isDefaultExchange(exchangeName) ? "" : exchangeName;
+        exchangeName = SpringRabbitMQHelper.isDefaultExchange(exchangeName) ? "" : exchangeName;
 
-        String routingKey = (String) exchange.getMessage().removeHeader(RabbitMQConstants.ROUTING_OVERRIDE_KEY);
+        String routingKey = (String) exchange.getMessage().removeHeader(SpringRabbitMQConstants.ROUTING_OVERRIDE_KEY);
         if (routingKey == null) {
             routingKey = getEndpoint().getRoutingKey();
         }
@@ -186,13 +186,13 @@ public class RabbitMQProducer extends DefaultAsyncProducer {
 
     protected boolean processInOnly(Exchange exchange, AsyncCallback callback) {
         // header take precedence over endpoint
-        String exchangeName = (String) exchange.getMessage().removeHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
+        String exchangeName = (String) exchange.getMessage().removeHeader(SpringRabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
         if (exchangeName == null) {
             exchangeName = getEndpoint().getExchangeName();
         }
-        exchangeName = RabbitMQHelper.isDefaultExchange(exchangeName) ? "" : exchangeName;
+        exchangeName = SpringRabbitMQHelper.isDefaultExchange(exchangeName) ? "" : exchangeName;
 
-        String routingKey = (String) exchange.getMessage().removeHeader(RabbitMQConstants.ROUTING_OVERRIDE_KEY);
+        String routingKey = (String) exchange.getMessage().removeHeader(SpringRabbitMQConstants.ROUTING_OVERRIDE_KEY);
         if (routingKey == null) {
             routingKey = getEndpoint().getRoutingKey();
         }
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQSendDynamicAware.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
similarity index 87%
rename from components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQSendDynamicAware.java
rename to components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
index 4c1eb91..a79bfe0 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/RabbitMQSendDynamicAware.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
@@ -30,11 +30,11 @@ import org.apache.camel.util.URISupport;
 /**
  * RabbitMQ based {@link org.apache.camel.spi.SendDynamicAware} which allows to optimise RabbitMQ components with the
  * toD (dynamic to) DSL in Camel. This implementation optimises by allowing to provide dynamic parameters via
- * {@link RabbitMQConstants#EXCHANGE_OVERRIDE_NAME} header instead of the endpoint uri. That allows to use a static
- * endpoint and its producer to service dynamic requests.
+ * {@link SpringRabbitMQConstants#EXCHANGE_OVERRIDE_NAME} header instead of the endpoint uri. That allows to use a
+ * static endpoint and its producer to service dynamic requests.
  */
 @SendDynamic("spring-rabbitmq")
-public class RabbitMQSendDynamicAware extends ServiceSupport implements SendDynamicAware {
+public class SpringRabbitMQSendDynamicAware extends ServiceSupport implements SendDynamicAware {
 
     private CamelContext camelContext;
     private String scheme;
@@ -105,20 +105,20 @@ public class RabbitMQSendDynamicAware extends ServiceSupport implements SendDyna
     @Override
     public Processor createPreProcessor(Exchange exchange, DynamicAwareEntry entry) throws Exception {
         // preserve existing headers if they are already there
-        String s = exchange.getMessage().getHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME, String.class);
+        String s = exchange.getMessage().getHeader(SpringRabbitMQConstants.EXCHANGE_OVERRIDE_NAME, String.class);
         final String destinationName = s != null ? s : parseExchangeName(entry.getUri());
 
-        s = exchange.getMessage().getHeader(RabbitMQConstants.ROUTING_OVERRIDE_KEY, String.class);
+        s = exchange.getMessage().getHeader(SpringRabbitMQConstants.ROUTING_OVERRIDE_KEY, String.class);
         final String routingKey = s != null ? s : parseRoutingKey(entry.getUri());
 
         return new Processor() {
             @Override
             public void process(Exchange exchange) throws Exception {
                 if (destinationName != null) {
-                    exchange.getMessage().setHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME, destinationName);
+                    exchange.getMessage().setHeader(SpringRabbitMQConstants.EXCHANGE_OVERRIDE_NAME, destinationName);
                 }
                 if (routingKey != null) {
-                    exchange.getMessage().setHeader(RabbitMQConstants.ROUTING_OVERRIDE_KEY, routingKey);
+                    exchange.getMessage().setHeader(SpringRabbitMQConstants.ROUTING_OVERRIDE_KEY, routingKey);
                 }
             }
         };
diff --git a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/AbstractRabbitMQIntTest.java b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/AbstractRabbitMQIntTest.java
index 7f895d0..1817201 100644
--- a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/AbstractRabbitMQIntTest.java
+++ b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/AbstractRabbitMQIntTest.java
@@ -17,7 +17,7 @@
 package org.apache.camel.component.springrabbit.integration;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.component.springrabbit.RabbitMQComponent;
+import org.apache.camel.component.springrabbit.SpringRabbitMQComponent;
 import org.apache.camel.component.springrabbit.test.infra.services.RabbitMQServiceFactory;
 import org.apache.camel.test.infra.rabbitmq.services.RabbitMQService;
 import org.apache.camel.test.junit5.CamelTestSupport;
@@ -47,7 +47,7 @@ public abstract class AbstractRabbitMQIntTest extends CamelTestSupport {
         CamelContext context = super.createCamelContext();
         context.getRegistry().bind("myCF", createConnectionFactory());
 
-        RabbitMQComponent rmq = context.getComponent("spring-rabbitmq", RabbitMQComponent.class);
+        SpringRabbitMQComponent rmq = context.getComponent("spring-rabbitmq", SpringRabbitMQComponent.class);
         // turn on auto declare
         rmq.setAutoDeclare(true);
 
diff --git a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQConsumerQueuesIntTest.java b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQConsumerQueuesIntTest.java
index 6d2f641..c3bdf5b 100644
--- a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQConsumerQueuesIntTest.java
+++ b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQConsumerQueuesIntTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.springrabbit.integration;
 
 import java.util.concurrent.TimeUnit;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.jupiter.api.Test;
@@ -60,6 +61,7 @@ public class RabbitMQConsumerQueuesIntTest extends AbstractRabbitMQIntTest {
 
         getMockEndpoint("mock:result").expectedBodiesReceived("foo");
         getMockEndpoint("mock:result").expectedHeaderReceived("bar", "baz");
+        getMockEndpoint("mock:result").expectedHeaderReceived(Exchange.CONTENT_TYPE, MessageProperties.CONTENT_TYPE_TEXT_PLAIN);
 
         template.sendBody("direct:start", body);
 
diff --git a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerIntTest.java b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerIntTest.java
index fff0612..3ee6bdf 100644
--- a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerIntTest.java
+++ b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerIntTest.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.springrabbit.integration;
 
+import java.nio.charset.Charset;
+
+import org.apache.camel.Exchange;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.jupiter.api.Assertions;
@@ -103,6 +106,30 @@ public class RabbitMQProducerIntTest extends AbstractRabbitMQIntTest {
         Assertions.assertEquals("baz", out.getMessageProperties().getHeader("bar"));
     }
 
+    @Test
+    public void testProducerContentType() throws Exception {
+        ConnectionFactory cf = context.getRegistry().lookupByNameAndType("myCF", ConnectionFactory.class);
+
+        Queue q = new Queue("myqueue");
+        TopicExchange t = new TopicExchange("foo");
+
+        AmqpAdmin admin = new RabbitAdmin(cf);
+        admin.declareQueue(q);
+        admin.declareExchange(t);
+        admin.declareBinding(BindingBuilder.bind(q).to(t).with("foo.bar.#"));
+
+        template.sendBodyAndHeader("direct:start", "<price>123</price>", Exchange.CONTENT_TYPE, "application/xml");
+
+        AmqpTemplate template = new RabbitTemplate(cf);
+        Message out = template.receive("myqueue");
+
+        String encoding = out.getMessageProperties().getContentEncoding();
+        Assertions.assertEquals(Charset.defaultCharset().name(), encoding);
+        Assertions.assertEquals("<price>123</price>", new String(out.getBody(), encoding));
+        Assertions.assertEquals("application/xml", out.getMessageProperties().getContentType());
+        Assertions.assertEquals(0, out.getMessageProperties().getHeaders().size());
+    }
+
     @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java
index ac2a18e..b27b39b 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java
@@ -20,7 +20,7 @@ import javax.annotation.Generated;
 import org.apache.camel.Component;
 import org.apache.camel.builder.component.AbstractComponentBuilder;
 import org.apache.camel.builder.component.ComponentBuilder;
-import org.apache.camel.component.springrabbit.RabbitMQComponent;
+import org.apache.camel.component.springrabbit.SpringRabbitMQComponent;
 
 /**
  * Send and receive messages from RabbitMQ using Spring RabbitMQ client.
@@ -49,7 +49,7 @@ public interface SpringRabbitmqComponentBuilderFactory {
      */
     interface SpringRabbitmqComponentBuilder
             extends
-                ComponentBuilder<RabbitMQComponent> {
+                ComponentBuilder<SpringRabbitMQComponent> {
         /**
          * Optional AMQP Admin service to use for auto declaring elements
          * (queues, exchanges, bindings).
@@ -409,12 +409,12 @@ public interface SpringRabbitmqComponentBuilderFactory {
 
     class SpringRabbitmqComponentBuilderImpl
             extends
-                AbstractComponentBuilder<RabbitMQComponent>
+                AbstractComponentBuilder<SpringRabbitMQComponent>
             implements
                 SpringRabbitmqComponentBuilder {
         @Override
-        protected RabbitMQComponent buildConcreteComponent() {
-            return new RabbitMQComponent();
+        protected SpringRabbitMQComponent buildConcreteComponent() {
+            return new SpringRabbitMQComponent();
         }
         @Override
         protected boolean setPropertyOnComponent(
@@ -422,26 +422,26 @@ public interface SpringRabbitmqComponentBuilderFactory {
                 String name,
                 Object value) {
             switch (name) {
-            case "amqpAdmin": ((RabbitMQComponent) component).setAmqpAdmin((org.springframework.amqp.core.AmqpAdmin) value); return true;
-            case "connectionFactory": ((RabbitMQComponent) component).setConnectionFactory((org.springframework.amqp.rabbit.connection.ConnectionFactory) value); return true;
-            case "testConnectionOnStartup": ((RabbitMQComponent) component).setTestConnectionOnStartup((boolean) value); return true;
-            case "autoDeclare": ((RabbitMQComponent) component).setAutoDeclare((boolean) value); return true;
-            case "autoStartup": ((RabbitMQComponent) component).setAutoStartup((boolean) value); return true;
-            case "bridgeErrorHandler": ((RabbitMQComponent) component).setBridgeErrorHandler((boolean) value); return true;
-            case "deadLetterExchange": ((RabbitMQComponent) component).setDeadLetterExchange((java.lang.String) value); return true;
-            case "deadLetterExchangeType": ((RabbitMQComponent) component).setDeadLetterExchangeType((java.lang.String) value); return true;
-            case "deadLetterQueue": ((RabbitMQComponent) component).setDeadLetterQueue((java.lang.String) value); return true;
-            case "deadLetterRoutingKey": ((RabbitMQComponent) component).setDeadLetterRoutingKey((java.lang.String) value); return true;
-            case "errorHandler": ((RabbitMQComponent) component).setErrorHandler((org.springframework.util.ErrorHandler) value); return true;
-            case "listenerContainerFactory": ((RabbitMQComponent) component).setListenerContainerFactory((org.apache.camel.component.springrabbit.ListenerContainerFactory) value); return true;
-            case "prefetchCount": ((RabbitMQComponent) component).setPrefetchCount((int) value); return true;
-            case "shutdownTimeout": ((RabbitMQComponent) component).setShutdownTimeout((long) value); return true;
-            case "lazyStartProducer": ((RabbitMQComponent) component).setLazyStartProducer((boolean) value); return true;
-            case "autowiredEnabled": ((RabbitMQComponent) component).setAutowiredEnabled((boolean) value); return true;
-            case "ignoreDeclarationExceptions": ((RabbitMQComponent) component).setIgnoreDeclarationExceptions((boolean) value); return true;
-            case "messageConverter": ((RabbitMQComponent) component).setMessageConverter((org.springframework.amqp.support.converter.MessageConverter) value); return true;
-            case "messagePropertiesConverter": ((RabbitMQComponent) component).setMessagePropertiesConverter((org.apache.camel.component.springrabbit.MessagePropertiesConverter) value); return true;
-            case "headerFilterStrategy": ((RabbitMQComponent) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true;
+            case "amqpAdmin": ((SpringRabbitMQComponent) component).setAmqpAdmin((org.springframework.amqp.core.AmqpAdmin) value); return true;
+            case "connectionFactory": ((SpringRabbitMQComponent) component).setConnectionFactory((org.springframework.amqp.rabbit.connection.ConnectionFactory) value); return true;
+            case "testConnectionOnStartup": ((SpringRabbitMQComponent) component).setTestConnectionOnStartup((boolean) value); return true;
+            case "autoDeclare": ((SpringRabbitMQComponent) component).setAutoDeclare((boolean) value); return true;
+            case "autoStartup": ((SpringRabbitMQComponent) component).setAutoStartup((boolean) value); return true;
+            case "bridgeErrorHandler": ((SpringRabbitMQComponent) component).setBridgeErrorHandler((boolean) value); return true;
+            case "deadLetterExchange": ((SpringRabbitMQComponent) component).setDeadLetterExchange((java.lang.String) value); return true;
+            case "deadLetterExchangeType": ((SpringRabbitMQComponent) component).setDeadLetterExchangeType((java.lang.String) value); return true;
+            case "deadLetterQueue": ((SpringRabbitMQComponent) component).setDeadLetterQueue((java.lang.String) value); return true;
+            case "deadLetterRoutingKey": ((SpringRabbitMQComponent) component).setDeadLetterRoutingKey((java.lang.String) value); return true;
+            case "errorHandler": ((SpringRabbitMQComponent) component).setErrorHandler((org.springframework.util.ErrorHandler) value); return true;
+            case "listenerContainerFactory": ((SpringRabbitMQComponent) component).setListenerContainerFactory((org.apache.camel.component.springrabbit.ListenerContainerFactory) value); return true;
+            case "prefetchCount": ((SpringRabbitMQComponent) component).setPrefetchCount((int) value); return true;
+            case "shutdownTimeout": ((SpringRabbitMQComponent) component).setShutdownTimeout((long) value); return true;
+            case "lazyStartProducer": ((SpringRabbitMQComponent) component).setLazyStartProducer((boolean) value); return true;
+            case "autowiredEnabled": ((SpringRabbitMQComponent) component).setAutowiredEnabled((boolean) value); return true;
+            case "ignoreDeclarationExceptions": ((SpringRabbitMQComponent) component).setIgnoreDeclarationExceptions((boolean) value); return true;
+            case "messageConverter": ((SpringRabbitMQComponent) component).setMessageConverter((org.springframework.amqp.support.converter.MessageConverter) value); return true;
+            case "messagePropertiesConverter": ((SpringRabbitMQComponent) component).setMessagePropertiesConverter((org.apache.camel.component.springrabbit.MessagePropertiesConverter) value); return true;
+            case "headerFilterStrategy": ((SpringRabbitMQComponent) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true;
             default: return false;
             }
         }
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index c81ba06..00489b3 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -6973,7 +6973,7 @@
     "deprecated": false,
     "firstVersion": "3.8.0",
     "label": "messaging",
-    "javaType": "org.apache.camel.component.springrabbit.RabbitMQComponent",
+    "javaType": "org.apache.camel.component.springrabbit.SpringRabbitMQComponent",
     "supportLevel": "Preview",
     "groupId": "org.apache.camel",
     "artifactId": "camel-spring-rabbitmq",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
index 3889168..8320e80 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
@@ -323,6 +323,7 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.SpringBatchEndpointBuilderFactory.SpringBatchBuilders,
             org.apache.camel.builder.endpoint.dsl.SpringIntegrationEndpointBuilderFactory.SpringIntegrationBuilders,
             org.apache.camel.builder.endpoint.dsl.SpringLdapEndpointBuilderFactory.SpringLdapBuilders,
+            org.apache.camel.builder.endpoint.dsl.SpringRabbitMQEndpointBuilderFactory.SpringRabbitMQBuilders,
             org.apache.camel.builder.endpoint.dsl.SpringWebserviceEndpointBuilderFactory.SpringWebserviceBuilders,
             org.apache.camel.builder.endpoint.dsl.SqlEndpointBuilderFactory.SqlBuilders,
             org.apache.camel.builder.endpoint.dsl.SqlStoredEndpointBuilderFactory.SqlStoredBuilders,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
index c906d55..9bf24dd 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
@@ -320,6 +320,7 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.SpringBatchEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SpringIntegrationEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SpringLdapEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.SpringRabbitMQEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SpringWebserviceEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SqlEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.SqlStoredEndpointBuilderFactory,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index b5083ff..beb68f9 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -14341,9 +14341,9 @@ public class StaticEndpointBuilders {
      * @param path exchangeName
      * @return the dsl builder
      */
-    public static org.apache.camel.builder.endpoint.dsl.RabbitMQEndpointBuilderFactory.RabbitMQEndpointBuilder springRabbitmq(
+    public static org.apache.camel.builder.endpoint.dsl.SpringRabbitMQEndpointBuilderFactory.SpringRabbitMQEndpointBuilder springRabbitmq(
             String path) {
-        return org.apache.camel.builder.endpoint.dsl.RabbitMQEndpointBuilderFactory.endpointBuilder("spring-rabbitmq", path);
+        return org.apache.camel.builder.endpoint.dsl.SpringRabbitMQEndpointBuilderFactory.endpointBuilder("spring-rabbitmq", path);
     }
     /**
      * Spring RabbitMQ (camel-spring-rabbitmq)
@@ -14366,10 +14366,10 @@ public class StaticEndpointBuilders {
      * @param path exchangeName
      * @return the dsl builder
      */
-    public static org.apache.camel.builder.endpoint.dsl.RabbitMQEndpointBuilderFactory.RabbitMQEndpointBuilder springRabbitmq(
+    public static org.apache.camel.builder.endpoint.dsl.SpringRabbitMQEndpointBuilderFactory.SpringRabbitMQEndpointBuilder springRabbitmq(
             String componentName,
             String path) {
-        return org.apache.camel.builder.endpoint.dsl.RabbitMQEndpointBuilderFactory.endpointBuilder(componentName, path);
+        return org.apache.camel.builder.endpoint.dsl.SpringRabbitMQEndpointBuilderFactory.endpointBuilder(componentName, path);
     }
     /**
      * Spring Redis (camel-spring-redis)
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SpringRabbitMQEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SpringRabbitMQEndpointBuilderFactory.java
new file mode 100644
index 0000000..4a9df38
--- /dev/null
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SpringRabbitMQEndpointBuilderFactory.java
@@ -0,0 +1,1571 @@
+/*
+ * 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.builder.endpoint.dsl;
+
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.builder.EndpointConsumerBuilder;
+import org.apache.camel.builder.EndpointProducerBuilder;
+import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
+import org.apache.camel.spi.ExceptionHandler;
+
+/**
+ * Send and receive messages from RabbitMQ using Spring RabbitMQ client.
+ *
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
+public interface SpringRabbitMQEndpointBuilderFactory {
+
+
+    /**
+     * Builder for endpoint consumers for the Spring RabbitMQ component.
+     */
+    public interface SpringRabbitMQEndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default AdvancedSpringRabbitMQEndpointConsumerBuilder advanced() {
+            return (AdvancedSpringRabbitMQEndpointConsumerBuilder) this;
+        }
+        /**
+         * 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;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
+         *
+         * Group: common
+         *
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
+         *
+         * Group: common
+         *
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * 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 disableReplyTo the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder disableReplyTo(
+                boolean disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
+            return this;
+        }
+        /**
+         * 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.
+         *
+         * Default: false
+         * Group: common
+         *
+         * @param disableReplyTo the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder disableReplyTo(
+                String disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
+            return this;
+        }
+        /**
+         * The value of a routing key to use. Default is empty which is not
+         * helpful when using the default (or any direct) exchange, but fine if
+         * the exchange is a headers exchange for instance.
+         *
+         * 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 SpringRabbitMQEndpointConsumerBuilder routingKey(
+                String routingKey) {
+            doSetProperty("routingKey", routingKey);
+            return this;
+        }
+        /**
+         * 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 testConnectionOnStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder testConnectionOnStartup(
+                boolean testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
+            return this;
+        }
+        /**
+         * 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 testConnectionOnStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder testConnectionOnStartup(
+                String testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
+            return this;
+        }
+        /**
+         * Flag controlling the behaviour of the container with respect to
+         * message acknowledgement. The most common usage is to let the
+         * container handle the acknowledgements (so the listener doesn't need
+         * to know about the channel or the message). Set to
+         * AcknowledgeMode.MANUAL if the listener will send the acknowledgements
+         * itself using Channel.basicAck(long, boolean). Manual acks are
+         * consistent with either a transactional or non-transactional channel,
+         * but if you are doing no other work on the channel at the same other
+         * than receiving a single message then the transaction is probably
+         * unnecessary. Set to AcknowledgeMode.NONE to tell the broker not to
+         * expect any acknowledgements, and it will assume all messages are
+         * acknowledged as soon as they are sent (this is autoack in native
+         * Rabbit broker terms). If AcknowledgeMode.NONE then the channel cannot
+         * be transactional (so the container will fail on start up if that flag
+         * is accidentally set).
+         *
+         * The option is a:
+         * &lt;code&gt;org.springframework.amqp.core.AcknowledgeMode&lt;/code&gt; type.
+         *
+         * Group: consumer
+         *
+         * @param acknowledgeMode the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder acknowledgeMode(
+                AcknowledgeMode acknowledgeMode) {
+            doSetProperty("acknowledgeMode", acknowledgeMode);
+            return this;
+        }
+        /**
+         * Flag controlling the behaviour of the container with respect to
+         * message acknowledgement. The most common usage is to let the
+         * container handle the acknowledgements (so the listener doesn't need
+         * to know about the channel or the message). Set to
+         * AcknowledgeMode.MANUAL if the listener will send the acknowledgements
+         * itself using Channel.basicAck(long, boolean). Manual acks are
+         * consistent with either a transactional or non-transactional channel,
+         * but if you are doing no other work on the channel at the same other
+         * than receiving a single message then the transaction is probably
+         * unnecessary. Set to AcknowledgeMode.NONE to tell the broker not to
+         * expect any acknowledgements, and it will assume all messages are
+         * acknowledged as soon as they are sent (this is autoack in native
+         * Rabbit broker terms). If AcknowledgeMode.NONE then the channel cannot
+         * be transactional (so the container will fail on start up if that flag
+         * is accidentally set).
+         *
+         * The option will be converted to a
+         * &lt;code&gt;org.springframework.amqp.core.AcknowledgeMode&lt;/code&gt; type.
+         *
+         * Group: consumer
+         *
+         * @param acknowledgeMode the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder acknowledgeMode(
+                String acknowledgeMode) {
+            doSetProperty("acknowledgeMode", acknowledgeMode);
+            return this;
+        }
+        /**
+         * 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: consumer
+         *
+         * @param asyncConsumer the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder asyncConsumer(
+                boolean asyncConsumer) {
+            doSetProperty("asyncConsumer", asyncConsumer);
+            return this;
+        }
+        /**
+         * 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: consumer
+         *
+         * @param asyncConsumer the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder asyncConsumer(
+                String asyncConsumer) {
+            doSetProperty("asyncConsumer", asyncConsumer);
+            return this;
+        }
+        /**
+         * 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: consumer
+         *
+         * @param autoDeclare the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder autoDeclare(
+                boolean autoDeclare) {
+            doSetProperty("autoDeclare", autoDeclare);
+            return this;
+        }
+        /**
+         * 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: consumer
+         *
+         * @param autoDeclare the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder autoDeclare(
+                String autoDeclare) {
+            doSetProperty("autoDeclare", autoDeclare);
+            return this;
+        }
+        /**
+         * Specifies whether the consumer container should auto-startup.
+         *
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         *
+         * Default: true
+         * Group: consumer
+         *
+         * @param autoStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder autoStartup(
+                boolean autoStartup) {
+            doSetProperty("autoStartup", autoStartup);
+            return this;
+        }
+        /**
+         * Specifies whether the consumer container should auto-startup.
+         *
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         *
+         * Default: true
+         * Group: consumer
+         *
+         * @param autoStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder autoStartup(
+                String autoStartup) {
+            doSetProperty("autoStartup", autoStartup);
+            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 SpringRabbitMQEndpointConsumerBuilder 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 SpringRabbitMQEndpointConsumerBuilder bridgeErrorHandler(
+                String bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+            return this;
+        }
+        /**
+         * The name of the dead letter exchange.
+         *
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         *
+         * Group: consumer
+         *
+         * @param deadLetterExchange the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder 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: consumer
+         *
+         * @param deadLetterExchangeType the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder 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: consumer
+         *
+         * @param deadLetterQueue the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder 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: consumer
+         *
+         * @param deadLetterRoutingKey the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder deadLetterRoutingKey(
+                String deadLetterRoutingKey) {
+            doSetProperty("deadLetterRoutingKey", deadLetterRoutingKey);
+            return this;
+        }
+        /**
+         * The type of the exchange.
+         *
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         *
+         * Default: direct
+         * Group: consumer
+         *
+         * @param exchangeType the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder exchangeType(
+                String exchangeType) {
+            doSetProperty("exchangeType", exchangeType);
+            return this;
+        }
+        /**
+         * Set to true for an exclusive consumer.
+         *
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         *
+         * Default: false
+         * Group: consumer
+         *
+         * @param exclusive the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder exclusive(
+                boolean exclusive) {
+            doSetProperty("exclusive", exclusive);
+            return this;
+        }
+        /**
+         * Set to true for an exclusive consumer.
+         *
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         *
+         * Default: false
+         * Group: consumer
+         *
+         * @param exclusive the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder exclusive(String exclusive) {
+            doSetProperty("exclusive", exclusive);
+            return this;
+        }
+        /**
+         * Set to true for an no-local consumer.
+         *
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         *
+         * Default: false
+         * Group: consumer
+         *
+         * @param noLocal the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder noLocal(boolean noLocal) {
+            doSetProperty("noLocal", noLocal);
+            return this;
+        }
+        /**
+         * Set to true for an no-local consumer.
+         *
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         *
+         * Default: false
+         * Group: consumer
+         *
+         * @param noLocal the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder noLocal(String noLocal) {
+            doSetProperty("noLocal", noLocal);
+            return this;
+        }
+        /**
+         * The queue(s) to use for consuming messages. Multiple queue names can
+         * be separated by comma. If none has been configured then Camel will
+         * generate an unique id as the queue name for the consumer.
+         *
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         *
+         * Group: consumer
+         *
+         * @param queues the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder queues(String queues) {
+            doSetProperty("queues", queues);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint consumers for the Spring RabbitMQ
+     * component.
+     */
+    public interface AdvancedSpringRabbitMQEndpointConsumerBuilder
+            extends
+                EndpointConsumerBuilder {
+        default SpringRabbitMQEndpointConsumerBuilder basic() {
+            return (SpringRabbitMQEndpointConsumerBuilder) 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 AdvancedSpringRabbitMQEndpointConsumerBuilder 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 AdvancedSpringRabbitMQEndpointConsumerBuilder 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 AdvancedSpringRabbitMQEndpointConsumerBuilder 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 AdvancedSpringRabbitMQEndpointConsumerBuilder exchangePattern(
+                String exchangePattern) {
+            doSetProperty("exchangePattern", exchangePattern);
+            return this;
+        }
+        /**
+         * Specify arguments for configuring the different RabbitMQ concepts, a
+         * different prefix is required for each element: arg.consumer.
+         * 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;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 AdvancedSpringRabbitMQEndpointConsumerBuilder 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 element: arg.consumer.
+         * 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;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 AdvancedSpringRabbitMQEndpointConsumerBuilder args(Map values) {
+            doSetMultiValueProperties("args", "arg.", values);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messageConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointConsumerBuilder messageConverter(
+                Object messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messageConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointConsumerBuilder messageConverter(
+                String messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
+            return this;
+        }
+        /**
+         * 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;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messagePropertiesConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointConsumerBuilder messagePropertiesConverter(
+                Object messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
+            return this;
+        }
+        /**
+         * 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;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messagePropertiesConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointConsumerBuilder messagePropertiesConverter(
+                String messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
+            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 AdvancedSpringRabbitMQEndpointConsumerBuilder 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 AdvancedSpringRabbitMQEndpointConsumerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+    }
+
+    /**
+     * Builder for endpoint producers for the Spring RabbitMQ component.
+     */
+    public interface SpringRabbitMQEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default AdvancedSpringRabbitMQEndpointProducerBuilder advanced() {
+            return (AdvancedSpringRabbitMQEndpointProducerBuilder) this;
+        }
+        /**
+         * 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;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
+         *
+         * Group: common
+         *
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
+         *
+         * Group: common
+         *
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * 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 disableReplyTo the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder disableReplyTo(
+                boolean disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
+            return this;
+        }
+        /**
+         * 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.
+         *
+         * Default: false
+         * Group: common
+         *
+         * @param disableReplyTo the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder disableReplyTo(
+                String disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
+            return this;
+        }
+        /**
+         * The value of a routing key to use. Default is empty which is not
+         * helpful when using the default (or any direct) exchange, but fine if
+         * the exchange is a headers exchange for instance.
+         *
+         * 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 SpringRabbitMQEndpointProducerBuilder routingKey(
+                String routingKey) {
+            doSetProperty("routingKey", routingKey);
+            return this;
+        }
+        /**
+         * 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 testConnectionOnStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder testConnectionOnStartup(
+                boolean testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
+            return this;
+        }
+        /**
+         * 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 testConnectionOnStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder testConnectionOnStartup(
+                String testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
+            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 SpringRabbitMQEndpointProducerBuilder 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 SpringRabbitMQEndpointProducerBuilder lazyStartProducer(
+                String lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * Specify the timeout in milliseconds to be used when waiting for a
+         * reply message when doing request/reply messaging. The default value
+         * is 5 seconds. A negative value indicates an indefinite timeout.
+         *
+         * The option is a: &lt;code&gt;long&lt;/code&gt; type.
+         *
+         * Default: 5000
+         * Group: producer
+         *
+         * @param replyTimeout the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder replyTimeout(
+                long replyTimeout) {
+            doSetProperty("replyTimeout", replyTimeout);
+            return this;
+        }
+        /**
+         * Specify the timeout in milliseconds to be used when waiting for a
+         * reply message when doing request/reply messaging. The default value
+         * is 5 seconds. A negative value indicates an indefinite timeout.
+         *
+         * The option will be converted to a &lt;code&gt;long&lt;/code&gt; type.
+         *
+         * Default: 5000
+         * Group: producer
+         *
+         * @param replyTimeout the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder replyTimeout(
+                String replyTimeout) {
+            doSetProperty("replyTimeout", replyTimeout);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint producers for the Spring RabbitMQ
+     * component.
+     */
+    public interface AdvancedSpringRabbitMQEndpointProducerBuilder
+            extends
+                EndpointProducerBuilder {
+        default SpringRabbitMQEndpointProducerBuilder basic() {
+            return (SpringRabbitMQEndpointProducerBuilder) this;
+        }
+        /**
+         * Specify arguments for configuring the different RabbitMQ concepts, a
+         * different prefix is required for each element: arg.consumer.
+         * 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;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 AdvancedSpringRabbitMQEndpointProducerBuilder 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 element: arg.consumer.
+         * 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;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 AdvancedSpringRabbitMQEndpointProducerBuilder args(Map values) {
+            doSetMultiValueProperties("args", "arg.", values);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messageConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointProducerBuilder messageConverter(
+                Object messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messageConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointProducerBuilder messageConverter(
+                String messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
+            return this;
+        }
+        /**
+         * 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;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messagePropertiesConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointProducerBuilder messagePropertiesConverter(
+                Object messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
+            return this;
+        }
+        /**
+         * 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;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messagePropertiesConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointProducerBuilder messagePropertiesConverter(
+                String messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
+            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 AdvancedSpringRabbitMQEndpointProducerBuilder 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 AdvancedSpringRabbitMQEndpointProducerBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+    }
+
+    /**
+     * Builder for endpoint for the Spring RabbitMQ component.
+     */
+    public interface SpringRabbitMQEndpointBuilder
+            extends
+                SpringRabbitMQEndpointConsumerBuilder,
+                SpringRabbitMQEndpointProducerBuilder {
+        default AdvancedSpringRabbitMQEndpointBuilder advanced() {
+            return (AdvancedSpringRabbitMQEndpointBuilder) this;
+        }
+        /**
+         * 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;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
+         *
+         * Group: common
+         *
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.rabbit.connection.ConnectionFactory&lt;/code&gt; type.
+         *
+         * Group: common
+         *
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * 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 disableReplyTo the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder disableReplyTo(
+                boolean disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
+            return this;
+        }
+        /**
+         * 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.
+         *
+         * Default: false
+         * Group: common
+         *
+         * @param disableReplyTo the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder disableReplyTo(
+                String disableReplyTo) {
+            doSetProperty("disableReplyTo", disableReplyTo);
+            return this;
+        }
+        /**
+         * The value of a routing key to use. Default is empty which is not
+         * helpful when using the default (or any direct) exchange, but fine if
+         * the exchange is a headers exchange for instance.
+         *
+         * 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 SpringRabbitMQEndpointBuilder routingKey(String routingKey) {
+            doSetProperty("routingKey", routingKey);
+            return this;
+        }
+        /**
+         * 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 testConnectionOnStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder testConnectionOnStartup(
+                boolean testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
+            return this;
+        }
+        /**
+         * 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 testConnectionOnStartup the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder testConnectionOnStartup(
+                String testConnectionOnStartup) {
+            doSetProperty("testConnectionOnStartup", testConnectionOnStartup);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint for the Spring RabbitMQ component.
+     */
+    public interface AdvancedSpringRabbitMQEndpointBuilder
+            extends
+                AdvancedSpringRabbitMQEndpointConsumerBuilder,
+                AdvancedSpringRabbitMQEndpointProducerBuilder {
+        default SpringRabbitMQEndpointBuilder basic() {
+            return (SpringRabbitMQEndpointBuilder) this;
+        }
+        /**
+         * Specify arguments for configuring the different RabbitMQ concepts, a
+         * different prefix is required for each element: arg.consumer.
+         * 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;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 AdvancedSpringRabbitMQEndpointBuilder 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 element: arg.consumer.
+         * 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;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 AdvancedSpringRabbitMQEndpointBuilder args(Map values) {
+            doSetMultiValueProperties("args", "arg.", values);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messageConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointBuilder messageConverter(
+                Object messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
+            return this;
+        }
+        /**
+         * 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;org.springframework.amqp.support.converter.MessageConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messageConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointBuilder messageConverter(
+                String messageConverter) {
+            doSetProperty("messageConverter", messageConverter);
+            return this;
+        }
+        /**
+         * 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;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messagePropertiesConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointBuilder messagePropertiesConverter(
+                Object messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
+            return this;
+        }
+        /**
+         * 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;org.apache.camel.component.springrabbit.MessagePropertiesConverter&lt;/code&gt; type.
+         *
+         * Group: advanced
+         *
+         * @param messagePropertiesConverter the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSpringRabbitMQEndpointBuilder messagePropertiesConverter(
+                String messagePropertiesConverter) {
+            doSetProperty("messagePropertiesConverter", messagePropertiesConverter);
+            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 AdvancedSpringRabbitMQEndpointBuilder 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 AdvancedSpringRabbitMQEndpointBuilder synchronous(
+                String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+    }
+
+    /**
+     * Proxy enum for <code>org.springframework.amqp.core.AcknowledgeMode</code>
+     * enum.
+     */
+    enum AcknowledgeMode {
+        NONE,
+        MANUAL,
+        AUTO;
+    }
+
+    public interface SpringRabbitMQBuilders {
+        /**
+         * Spring RabbitMQ (camel-spring-rabbitmq)
+         * Send and receive messages from RabbitMQ using Spring RabbitMQ client.
+         *
+         * Category: messaging
+         * Since: 3.8
+         * Maven coordinates: org.apache.camel:camel-spring-rabbitmq
+         *
+         * 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. Note: to use
+         * default exchange then do not use empty name, but use default instead.
+         *
+         * @param path exchangeName
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder springRabbitmq(String path) {
+            return SpringRabbitMQEndpointBuilderFactory.endpointBuilder("spring-rabbitmq", path);
+        }
+        /**
+         * Spring RabbitMQ (camel-spring-rabbitmq)
+         * Send and receive messages from RabbitMQ using Spring RabbitMQ client.
+         *
+         * Category: messaging
+         * Since: 3.8
+         * Maven coordinates: org.apache.camel:camel-spring-rabbitmq
+         *
+         * 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. 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 SpringRabbitMQEndpointBuilder springRabbitmq(
+                String componentName,
+                String path) {
+            return SpringRabbitMQEndpointBuilderFactory.endpointBuilder(componentName, path);
+        }
+    }
+    static SpringRabbitMQEndpointBuilder endpointBuilder(
+            String componentName,
+            String path) {
+        class SpringRabbitMQEndpointBuilderImpl extends AbstractEndpointBuilder implements SpringRabbitMQEndpointBuilder, AdvancedSpringRabbitMQEndpointBuilder {
+            public SpringRabbitMQEndpointBuilderImpl(String path) {
+                super(componentName, path);
+            }
+        }
+        return new SpringRabbitMQEndpointBuilderImpl(path);
+    }
+}
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/pages/minio-component.adoc b/docs/components/modules/ROOT/pages/minio-component.adoc
index 2109582..365473c 100644
--- a/docs/components/modules/ROOT/pages/minio-component.adoc
+++ b/docs/components/modules/ROOT/pages/minio-component.adoc
@@ -508,4 +508,4 @@ Maven users will need to add the following dependency to their pom.xml.
 
 where `$\{camel-version}` must be replaced by the actual version of Camel.
 
-include::camel-spring-boot::page$minio-starter.adoc[]
\ No newline at end of file
+include::camel-spring-boot::page$minio-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc b/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc
index e184a98..7380703 100644
--- a/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc
+++ b/docs/components/modules/ROOT/pages/spring-rabbitmq-component.adoc
@@ -169,7 +169,7 @@ to("spring-rabbitmq:default?routingKey=foo")
 Before you can send or receive messages from RabbitMQ, then exchanges, queues and bindings must be setup first.
 
 In development mode it may be desirable to let Camel automatic do this.
-You can enable this by setting `autoDeclare=true` on the `RabbitMQComponent`.
+You can enable this by setting `autoDeclare=true` on the `SpringRabbitMQComponent`.
 
 Then Spring RabbitMQ will automatic necessary declare the elements and setup the binding between the exchange, queue and routing keys.