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

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


The following commit(s) were added to refs/heads/main by this push:
     new 436e185ad36 CAMEL-20299: camel-spring-rabbitmq - Add option to auto 
declare produ… (#13427)
436e185ad36 is described below

commit 436e185ad36282c0ef9e3563df1e7f15e1127b69
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sun Mar 10 11:19:44 2024 +0100

    CAMEL-20299: camel-spring-rabbitmq - Add option to auto declare produ… 
(#13427)
    
    CAMEL-20299: camel-spring-rabbitmq - Add option to auto declare producer.
---
 .../camel/catalog/components/spring-rabbitmq.json  |  70 +++--
 .../SpringRabbitMQComponentConfigurer.java         |   6 +
 .../SpringRabbitMQEndpointConfigurer.java          |   6 +
 .../SpringRabbitMQEndpointUriFactory.java          |   3 +-
 .../component/springrabbit/spring-rabbitmq.json    |  70 +++--
 .../springrabbit/SpringRabbitMQComponent.java      |  17 +-
 .../springrabbit/SpringRabbitMQEndpoint.java       |  34 +-
 .../springrabbit/SpringRabbitMQProducer.java       |  12 +
 .../integration/RabbitMQProducerAutoDeclareIT.java | 122 ++++++++
 .../integration/RabbitMQProducerSimpleIT.java      |  40 +++
 .../dsl/SpringRabbitmqComponentBuilderFactory.java |  22 +-
 .../dsl/SpringRabbitMQEndpointBuilderFactory.java  | 343 ++++++++++++++++-----
 .../kotlin/components/SpringRabbitmqUriDsl.kt      |  48 +--
 13 files changed, 614 insertions(+), 179 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-rabbitmq.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-rabbitmq.json
index a7f5c0728a1..601f5d135c5 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-rabbitmq.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-rabbitmq.json
@@ -26,7 +26,7 @@
     "amqpAdmin": { "index": 0, "kind": "property", "displayName": "Amqp 
Admin", "group": "common", "label": "", "required": false, "type": "object", 
"javaType": "org.springframework.amqp.core.AmqpAdmin", "deprecated": false, 
"autowired": true, "secret": false, "description": "Optional AMQP Admin service 
to use for auto declaring elements (queues, exchanges, bindings)" },
     "connectionFactory": { "index": 1, "kind": "property", "displayName": 
"Connection Factory", "group": "common", "label": "", "required": false, 
"type": "object", "javaType": 
"org.springframework.amqp.rabbit.connection.ConnectionFactory", "deprecated": 
false, "autowired": true, "secret": false, "description": "The connection 
factory to be use. A connection factory must be configured either on the 
component or endpoint." },
     "testConnectionOnStartup": { "index": 2, "kind": "property", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Specifies whether to test the connection on startup. This 
ensures that when Camel starts that all the JMS consumers have a valid 
connection to the JMS broker. If a connection cannot be granted [...]
-    "autoDeclare": { "index": 3, "kind": "property", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting. Enabling this can be good for development to make it easy to 
standup exchanges, queues and bin [...]
+    "autoDeclare": { "index": 3, "kind": "property", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting. Enabling this can be good for development to make it easy to 
standup exchanges, queues and bind [...]
     "autoStartup": { "index": 4, "kind": "property", "displayName": "Auto 
Startup", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer container should auto-startup." },
     "bridgeErrorHandler": { "index": 5, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
     "deadLetterExchange": { "index": 6, "kind": "property", "displayName": 
"Dead Letter Exchange", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter exchange" },
@@ -45,14 +45,15 @@
     "retry": { "index": 19, "kind": "property", "displayName": "Retry", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.retry.interceptor.RetryOperationsInterceptor", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Custom retry configuration to use. If this is configured then the other 
settings such as maximumRetryAttempts for retry are not in use." },
     "shutdownTimeout": { "index": 20, "kind": "property", "displayName": 
"Shutdown Timeout", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "duration", "javaType": "long", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"5000", "description": "The time to wait for workers in milliseconds after the 
container is stopped. If any workers are active when the shutdown signal comes 
they will be allowed to finish processing as l [...]
     "allowNullBody": { "index": 21, "kind": "property", "displayName": "Allow 
Null Body", "group": "producer", "label": "producer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Whether to allow 
sending messages with no body. If this option is false and the message body is 
null, then an MessageConversionException is thrown." },
-    "lazyStartProducer": { "index": 22, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"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 fai [...]
-    "replyTimeout": { "index": 23, "kind": "property", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "5000", "description": "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." },
-    "args": { "index": 24, "kind": "property", "displayName": "Args", "group": 
"advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Specify arguments 
for configuring the different RabbitMQ concepts, a different prefix is required 
for each element: consumer. exchange. queue. binding. dlq.exchange. dlq.queue. 
dlq.binding. For example to [...]
-    "autowiredEnabled": { "index": 25, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
-    "ignoreDeclarationExceptions": { "index": 26, "kind": "property", 
"displayName": "Ignore Declaration Exceptions", "group": "advanced", "label": 
"advanced", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Switch on ignore exceptions such as mismatched 
properties when declaring" },
-    "messageConverter": { "index": 27, "kind": "property", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
-    "messagePropertiesConverter": { "index": 28, "kind": "property", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
-    "headerFilterStrategy": { "index": 29, "kind": "property", "displayName": 
"Header Filter Strategy", "group": "filter", "label": "filter", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "To use a custom 
org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel 
message." }
+    "autoDeclareProducer": { "index": 22, "kind": "property", "displayName": 
"Auto Declare Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Specifies whether the producer should auto declare binding between exchange, 
queue and routing key when starting. Enabling this can be good for development 
to make it easy to standup exchang [...]
+    "lazyStartProducer": { "index": 23, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"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 fai [...]
+    "replyTimeout": { "index": 24, "kind": "property", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "5000", "description": "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." },
+    "args": { "index": 25, "kind": "property", "displayName": "Args", "group": 
"advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Specify arguments 
for configuring the different RabbitMQ concepts, a different prefix is required 
for each element: consumer. exchange. queue. binding. dlq.exchange. dlq.queue. 
dlq.binding. For example to [...]
+    "autowiredEnabled": { "index": 26, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
+    "ignoreDeclarationExceptions": { "index": 27, "kind": "property", 
"displayName": "Ignore Declaration Exceptions", "group": "advanced", "label": 
"advanced", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Switch on ignore exceptions such as mismatched 
properties when declaring" },
+    "messageConverter": { "index": 28, "kind": "property", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
+    "messagePropertiesConverter": { "index": 29, "kind": "property", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
+    "headerFilterStrategy": { "index": 30, "kind": "property", "displayName": 
"Header Filter Strategy", "group": "filter", "label": "filter", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "To use a custom 
org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel 
message." }
   },
   "headers": {
     "CamelSpringRabbitmqRoutingOverrideKey": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "To override the endpoint 
configuration's routing key.", "constantName": 
"org.apache.camel.component.springrabbit.SpringRabbitMQConstants#ROUTING_OVERRIDE_KEY"
 },
@@ -79,22 +80,22 @@
   "properties": {
     "exchangeName": { "index": 0, "kind": "path", "displayName": "Exchange 
Name", "group": "common", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The exchange name 
determines the exchange to which the produced messages will be sent to. In the 
case of consumers, the exchange name determines the exchange the queue will be 
bound to. Note: to use default exchan [...]
     "connectionFactory": { "index": 1, "kind": "parameter", "displayName": 
"Connection Factory", "group": "common", "label": "common", "required": false, 
"type": "object", "javaType": 
"org.springframework.amqp.rabbit.connection.ConnectionFactory", "deprecated": 
false, "autowired": false, "secret": false, "description": "The connection 
factory to be use. A connection factory must be configured either on the 
component or endpoint." },
-    "disableReplyTo": { "index": 2, "kind": "parameter", "displayName": 
"Disable Reply To", "group": "common", "label": "common", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Specifies 
whether Camel ignores the ReplyTo header in messages. If true, Camel does not 
send a reply back to the destination specified in the ReplyTo header. You can 
use this option if you want Camel to c [...]
-    "routingKey": { "index": 3, "kind": "parameter", "displayName": "Routing 
Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "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." },
-    "testConnectionOnStartup": { "index": 4, "kind": "parameter", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Specifies whether to test the connection on startup. This 
ensures that when Camel starts that all the JMS consumers have a valid 
connection to the JMS broker. If a connection cannot be grante [...]
-    "acknowledgeMode": { "index": 5, "kind": "parameter", "displayName": 
"Acknowledge Mode", "group": "consumer", "label": "consumer", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.core.AcknowledgeMode", "enum": [ "NONE", "MANUAL", 
"AUTO" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Flag controlling the behaviour of the container with respect to 
message acknowledgement. The most common usage is to let the container handle 
the a [...]
-    "asyncConsumer": { "index": 6, "kind": "parameter", "displayName": "Async 
Consumer", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the consumer 
processes the Exchange asynchronously. If enabled then the consumer may pickup 
the next message from the queue, while the previous message is being processed 
asynchronously (by the A [...]
-    "autoDeclare": { "index": 7, "kind": "parameter", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting." },
-    "autoStartup": { "index": 8, "kind": "parameter", "displayName": "Auto 
Startup", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer container should auto-startup." },
-    "deadLetterExchange": { "index": 9, "kind": "parameter", "displayName": 
"Dead Letter Exchange", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter exchange" },
-    "deadLetterExchangeType": { "index": 10, "kind": "parameter", 
"displayName": "Dead Letter Exchange Type", "group": "consumer", "label": 
"consumer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "direct", "fanout", "headers", "topic" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"direct", "description": "The type of the dead letter exchange" },
-    "deadLetterQueue": { "index": 11, "kind": "parameter", "displayName": 
"Dead Letter Queue", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter queue" },
-    "deadLetterRoutingKey": { "index": 12, "kind": "parameter", "displayName": 
"Dead Letter Routing Key", "group": "consumer", "label": "consumer", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
routing key for the dead letter exchange" },
-    "exchangeType": { "index": 13, "kind": "parameter", "displayName": 
"Exchange Type", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "direct", "fanout", 
"headers", "topic" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "direct", "description": "The type of the exchange" },
-    "exclusive": { "index": 14, "kind": "parameter", "displayName": 
"Exclusive", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Set to true for 
an exclusive consumer" },
-    "maximumRetryAttempts": { "index": 15, "kind": "parameter", "displayName": 
"Maximum Retry Attempts", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 5, "description": "How many times a 
Rabbitmq consumer will retry the same message if Camel failed to process the 
message" },
-    "noLocal": { "index": 16, "kind": "parameter", "displayName": "No Local", 
"group": "consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Set to true for an no-local 
consumer" },
-    "queues": { "index": 17, "kind": "parameter", "displayName": "Queues", 
"group": "consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "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." },
+    "deadLetterExchange": { "index": 2, "kind": "parameter", "displayName": 
"Dead Letter Exchange", "group": "common", "label": "common", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter exchange" },
+    "deadLetterExchangeType": { "index": 3, "kind": "parameter", 
"displayName": "Dead Letter Exchange Type", "group": "common", "label": 
"common", "required": false, "type": "string", "javaType": "java.lang.String", 
"enum": [ "direct", "fanout", "headers", "topic" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "direct", "description": 
"The type of the dead letter exchange" },
+    "deadLetterQueue": { "index": 4, "kind": "parameter", "displayName": "Dead 
Letter Queue", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The name of the dead letter queue" },
+    "deadLetterRoutingKey": { "index": 5, "kind": "parameter", "displayName": 
"Dead Letter Routing Key", "group": "common", "label": "common", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The routing key for the 
dead letter exchange" },
+    "disableReplyTo": { "index": 6, "kind": "parameter", "displayName": 
"Disable Reply To", "group": "common", "label": "common", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Specifies 
whether Camel ignores the ReplyTo header in messages. If true, Camel does not 
send a reply back to the destination specified in the ReplyTo header. You can 
use this option if you want Camel to c [...]
+    "queues": { "index": 7, "kind": "parameter", "displayName": "Queues", 
"group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The queue(s) to use for consuming or producing 
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." },
+    "routingKey": { "index": 8, "kind": "parameter", "displayName": "Routing 
Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "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." },
+    "testConnectionOnStartup": { "index": 9, "kind": "parameter", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Specifies whether to test the connection on startup. This 
ensures that when Camel starts that all the JMS consumers have a valid 
connection to the JMS broker. If a connection cannot be grante [...]
+    "acknowledgeMode": { "index": 10, "kind": "parameter", "displayName": 
"Acknowledge Mode", "group": "consumer", "label": "consumer", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.core.AcknowledgeMode", "enum": [ "NONE", "MANUAL", 
"AUTO" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Flag controlling the behaviour of the container with respect to 
message acknowledgement. The most common usage is to let the container handle 
the  [...]
+    "asyncConsumer": { "index": 11, "kind": "parameter", "displayName": "Async 
Consumer", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the consumer 
processes the Exchange asynchronously. If enabled then the consumer may pickup 
the next message from the queue, while the previous message is being processed 
asynchronously (by the  [...]
+    "autoDeclare": { "index": 12, "kind": "parameter", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting." },
+    "autoStartup": { "index": 13, "kind": "parameter", "displayName": "Auto 
Startup", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer container should auto-startup." },
+    "exchangeType": { "index": 14, "kind": "parameter", "displayName": 
"Exchange Type", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "direct", "fanout", 
"headers", "topic" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "direct", "description": "The type of the exchange" },
+    "exclusive": { "index": 15, "kind": "parameter", "displayName": 
"Exclusive", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Set to true for 
an exclusive consumer" },
+    "maximumRetryAttempts": { "index": 16, "kind": "parameter", "displayName": 
"Maximum Retry Attempts", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 5, "description": "How many times a 
Rabbitmq consumer will retry the same message if Camel failed to process the 
message" },
+    "noLocal": { "index": 17, "kind": "parameter", "displayName": "No Local", 
"group": "consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Set to true for an no-local 
consumer" },
     "rejectAndDontRequeue": { "index": 18, "kind": "parameter", "displayName": 
"Reject And Dont Requeue", "group": "consumer", "label": "consumer", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether a Rabbitmq consumer should reject the message without 
requeuing. This enables failed messages to be sent to a Dead Letter 
Exchange\/Queue, if the broker is so configured." },
     "retryDelay": { "index": 19, "kind": "parameter", "displayName": "Retry 
Delay", "group": "consumer", "label": "consumer", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 1000, "description": "Delay in millis a 
Rabbitmq consumer will wait before redelivering a message that Camel failed to 
process" },
     "bridgeErrorHandler": { "index": 20, "kind": "parameter", "displayName": 
"Bridge Error Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Allows for bridging the consumer to the 
Camel routing Error Handler, which mean any exceptions (if possible) occurred 
while the Camel consumer is trying to pickup incoming [...]
@@ -106,14 +107,15 @@
     "prefetchCount": { "index": 26, "kind": "parameter", "displayName": 
"Prefetch Count", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "integer", "javaType": "java.lang.Integer", 
"deprecated": false, "autowired": false, "secret": false, "description": "Tell 
the broker how many messages to send in a single request. Often this can be set 
quite high to improve throughput." },
     "retry": { "index": 27, "kind": "parameter", "displayName": "Retry", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.retry.interceptor.RetryOperationsInterceptor", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Custom retry configuration to use. If this is configured then the other 
settings such as maximumRetryAttempts for retry are not in use." },
     "allowNullBody": { "index": 28, "kind": "parameter", "displayName": "Allow 
Null Body", "group": "producer", "label": "producer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Whether to allow 
sending messages with no body. If this option is false and the message body is 
null, then an MessageConversionException is thrown." },
-    "confirm": { "index": 29, "kind": "parameter", "displayName": "Confirm", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "enum": [ "auto", "enabled", "disabled" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"auto", "description": "Controls whether to wait for confirms. The connection 
factory must be configured for publisher confirms and this method. auto = Camel 
detects if the connection fac [...]
-    "confirmTimeout": { "index": 30, "kind": "parameter", "displayName": 
"Confirm Timeout", "group": "producer", "label": "producer", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "5000", "description": "Specify the 
timeout in milliseconds to be used when waiting for a message sent to be 
confirmed by RabbitMQ when doing send only messaging (InOnly). The default 
value is 5 seconds. A negative value indi [...]
-    "replyTimeout": { "index": 31, "kind": "parameter", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "30000", "description": "Specify the timeout 
in milliseconds to be used when waiting for a reply message when doing 
request\/reply (InOut) messaging. The default value is 30 seconds. A negative 
value indicates an indefinite timeo [...]
-    "usePublisherConnection": { "index": 32, "kind": "parameter", 
"displayName": "Use Publisher Connection", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Use a separate connection for publishers and consumers" 
},
-    "lazyStartProducer": { "index": 33, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "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 produ [...]
-    "args": { "index": 34, "kind": "parameter", "displayName": "Args", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": 
"arg.", "multiValue": true, "deprecated": false, "autowired": false, "secret": 
false, "description": "Specify arguments for configuring the different RabbitMQ 
concepts, a different prefix is required for each element: arg.consumer. 
arg.exchange. arg.queue. arg.bindin [...]
-    "messageConverter": { "index": 35, "kind": "parameter", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
-    "messagePropertiesConverter": { "index": 36, "kind": "parameter", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
-    "synchronous": { "index": 37, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Sets whether 
synchronous processing should be strictly used" }
+    "autoDeclareProducer": { "index": 29, "kind": "parameter", "displayName": 
"Auto Declare Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Specifies whether the producer should auto declare binding between exchange, 
queue and routing key when starting." },
+    "confirm": { "index": 30, "kind": "parameter", "displayName": "Confirm", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "enum": [ "auto", "enabled", "disabled" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"auto", "description": "Controls whether to wait for confirms. The connection 
factory must be configured for publisher confirms and this method. auto = Camel 
detects if the connection fac [...]
+    "confirmTimeout": { "index": 31, "kind": "parameter", "displayName": 
"Confirm Timeout", "group": "producer", "label": "producer", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "5000", "description": "Specify the 
timeout in milliseconds to be used when waiting for a message sent to be 
confirmed by RabbitMQ when doing send only messaging (InOnly). The default 
value is 5 seconds. A negative value indi [...]
+    "replyTimeout": { "index": 32, "kind": "parameter", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "30000", "description": "Specify the timeout 
in milliseconds to be used when waiting for a reply message when doing 
request\/reply (InOut) messaging. The default value is 30 seconds. A negative 
value indicates an indefinite timeo [...]
+    "usePublisherConnection": { "index": 33, "kind": "parameter", 
"displayName": "Use Publisher Connection", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Use a separate connection for publishers and consumers" 
},
+    "lazyStartProducer": { "index": 34, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "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 produ [...]
+    "args": { "index": 35, "kind": "parameter", "displayName": "Args", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": 
"arg.", "multiValue": true, "deprecated": false, "autowired": false, "secret": 
false, "description": "Specify arguments for configuring the different RabbitMQ 
concepts, a different prefix is required for each element: arg.consumer. 
arg.exchange. arg.queue. arg.bindin [...]
+    "messageConverter": { "index": 36, "kind": "parameter", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
+    "messagePropertiesConverter": { "index": 37, "kind": "parameter", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
+    "synchronous": { "index": 38, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Sets whether 
synchronous processing should be strictly used" }
   }
 }
diff --git 
a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponentConfigurer.java
 
b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponentConfigurer.java
index d9923ad4f5e..6a603811196 100644
--- 
a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponentConfigurer.java
+++ 
b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponentConfigurer.java
@@ -28,6 +28,8 @@ public class SpringRabbitMQComponentConfigurer extends 
PropertyConfigurerSupport
         case "args": target.setArgs(property(camelContext, 
java.util.Map.class, value)); return true;
         case "autodeclare":
         case "autoDeclare": target.setAutoDeclare(property(camelContext, 
boolean.class, value)); return true;
+        case "autodeclareproducer":
+        case "autoDeclareProducer": 
target.setAutoDeclareProducer(property(camelContext, boolean.class, value)); 
return true;
         case "autostartup":
         case "autoStartup": target.setAutoStartup(property(camelContext, 
boolean.class, value)); return true;
         case "autowiredenabled":
@@ -98,6 +100,8 @@ public class SpringRabbitMQComponentConfigurer extends 
PropertyConfigurerSupport
         case "args": return java.util.Map.class;
         case "autodeclare":
         case "autoDeclare": return boolean.class;
+        case "autodeclareproducer":
+        case "autoDeclareProducer": return boolean.class;
         case "autostartup":
         case "autoStartup": return boolean.class;
         case "autowiredenabled":
@@ -164,6 +168,8 @@ public class SpringRabbitMQComponentConfigurer extends 
PropertyConfigurerSupport
         case "args": return target.getArgs();
         case "autodeclare":
         case "autoDeclare": return target.isAutoDeclare();
+        case "autodeclareproducer":
+        case "autoDeclareProducer": return target.isAutoDeclareProducer();
         case "autostartup":
         case "autoStartup": return target.isAutoStartup();
         case "autowiredenabled":
diff --git 
a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointConfigurer.java
 
b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointConfigurer.java
index f11d960a2d5..d65a02dd62d 100644
--- 
a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointConfigurer.java
+++ 
b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointConfigurer.java
@@ -30,6 +30,8 @@ public class SpringRabbitMQEndpointConfigurer extends 
PropertyConfigurerSupport
         case "asyncConsumer": target.setAsyncConsumer(property(camelContext, 
boolean.class, value)); return true;
         case "autodeclare":
         case "autoDeclare": target.setAutoDeclare(property(camelContext, 
boolean.class, value)); return true;
+        case "autodeclareproducer":
+        case "autoDeclareProducer": 
target.setAutoDeclareProducer(property(camelContext, boolean.class, value)); 
return true;
         case "autostartup":
         case "autoStartup": target.setAutoStartup(property(camelContext, 
boolean.class, value)); return true;
         case "bridgeerrorhandler":
@@ -105,6 +107,8 @@ public class SpringRabbitMQEndpointConfigurer extends 
PropertyConfigurerSupport
         case "asyncConsumer": return boolean.class;
         case "autodeclare":
         case "autoDeclare": return boolean.class;
+        case "autodeclareproducer":
+        case "autoDeclareProducer": return boolean.class;
         case "autostartup":
         case "autoStartup": return boolean.class;
         case "bridgeerrorhandler":
@@ -181,6 +185,8 @@ public class SpringRabbitMQEndpointConfigurer extends 
PropertyConfigurerSupport
         case "asyncConsumer": return target.isAsyncConsumer();
         case "autodeclare":
         case "autoDeclare": return target.isAutoDeclare();
+        case "autodeclareproducer":
+        case "autoDeclareProducer": return target.isAutoDeclareProducer();
         case "autostartup":
         case "autoStartup": return target.isAutoStartup();
         case "bridgeerrorhandler":
diff --git 
a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointUriFactory.java
 
b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointUriFactory.java
index 9e0bc71025f..c3a5151cada 100644
--- 
a/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointUriFactory.java
+++ 
b/components/camel-spring-rabbitmq/src/generated/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpointUriFactory.java
@@ -21,12 +21,13 @@ public class SpringRabbitMQEndpointUriFactory extends 
org.apache.camel.support.c
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(38);
+        Set<String> props = new HashSet<>(39);
         props.add("acknowledgeMode");
         props.add("allowNullBody");
         props.add("args");
         props.add("asyncConsumer");
         props.add("autoDeclare");
+        props.add("autoDeclareProducer");
         props.add("autoStartup");
         props.add("bridgeErrorHandler");
         props.add("concurrentConsumers");
diff --git 
a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/org/apache/camel/component/springrabbit/spring-rabbitmq.json
 
b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/org/apache/camel/component/springrabbit/spring-rabbitmq.json
index a7f5c0728a1..601f5d135c5 100644
--- 
a/components/camel-spring-rabbitmq/src/generated/resources/META-INF/org/apache/camel/component/springrabbit/spring-rabbitmq.json
+++ 
b/components/camel-spring-rabbitmq/src/generated/resources/META-INF/org/apache/camel/component/springrabbit/spring-rabbitmq.json
@@ -26,7 +26,7 @@
     "amqpAdmin": { "index": 0, "kind": "property", "displayName": "Amqp 
Admin", "group": "common", "label": "", "required": false, "type": "object", 
"javaType": "org.springframework.amqp.core.AmqpAdmin", "deprecated": false, 
"autowired": true, "secret": false, "description": "Optional AMQP Admin service 
to use for auto declaring elements (queues, exchanges, bindings)" },
     "connectionFactory": { "index": 1, "kind": "property", "displayName": 
"Connection Factory", "group": "common", "label": "", "required": false, 
"type": "object", "javaType": 
"org.springframework.amqp.rabbit.connection.ConnectionFactory", "deprecated": 
false, "autowired": true, "secret": false, "description": "The connection 
factory to be use. A connection factory must be configured either on the 
component or endpoint." },
     "testConnectionOnStartup": { "index": 2, "kind": "property", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Specifies whether to test the connection on startup. This 
ensures that when Camel starts that all the JMS consumers have a valid 
connection to the JMS broker. If a connection cannot be granted [...]
-    "autoDeclare": { "index": 3, "kind": "property", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting. Enabling this can be good for development to make it easy to 
standup exchanges, queues and bin [...]
+    "autoDeclare": { "index": 3, "kind": "property", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting. Enabling this can be good for development to make it easy to 
standup exchanges, queues and bind [...]
     "autoStartup": { "index": 4, "kind": "property", "displayName": "Auto 
Startup", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer container should auto-startup." },
     "bridgeErrorHandler": { "index": 5, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
     "deadLetterExchange": { "index": 6, "kind": "property", "displayName": 
"Dead Letter Exchange", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter exchange" },
@@ -45,14 +45,15 @@
     "retry": { "index": 19, "kind": "property", "displayName": "Retry", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.retry.interceptor.RetryOperationsInterceptor", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Custom retry configuration to use. If this is configured then the other 
settings such as maximumRetryAttempts for retry are not in use." },
     "shutdownTimeout": { "index": 20, "kind": "property", "displayName": 
"Shutdown Timeout", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "duration", "javaType": "long", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"5000", "description": "The time to wait for workers in milliseconds after the 
container is stopped. If any workers are active when the shutdown signal comes 
they will be allowed to finish processing as l [...]
     "allowNullBody": { "index": 21, "kind": "property", "displayName": "Allow 
Null Body", "group": "producer", "label": "producer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Whether to allow 
sending messages with no body. If this option is false and the message body is 
null, then an MessageConversionException is thrown." },
-    "lazyStartProducer": { "index": 22, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"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 fai [...]
-    "replyTimeout": { "index": 23, "kind": "property", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "5000", "description": "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." },
-    "args": { "index": 24, "kind": "property", "displayName": "Args", "group": 
"advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Specify arguments 
for configuring the different RabbitMQ concepts, a different prefix is required 
for each element: consumer. exchange. queue. binding. dlq.exchange. dlq.queue. 
dlq.binding. For example to [...]
-    "autowiredEnabled": { "index": 25, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
-    "ignoreDeclarationExceptions": { "index": 26, "kind": "property", 
"displayName": "Ignore Declaration Exceptions", "group": "advanced", "label": 
"advanced", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Switch on ignore exceptions such as mismatched 
properties when declaring" },
-    "messageConverter": { "index": 27, "kind": "property", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
-    "messagePropertiesConverter": { "index": 28, "kind": "property", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
-    "headerFilterStrategy": { "index": 29, "kind": "property", "displayName": 
"Header Filter Strategy", "group": "filter", "label": "filter", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "To use a custom 
org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel 
message." }
+    "autoDeclareProducer": { "index": 22, "kind": "property", "displayName": 
"Auto Declare Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Specifies whether the producer should auto declare binding between exchange, 
queue and routing key when starting. Enabling this can be good for development 
to make it easy to standup exchang [...]
+    "lazyStartProducer": { "index": 23, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"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 fai [...]
+    "replyTimeout": { "index": 24, "kind": "property", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "5000", "description": "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." },
+    "args": { "index": 25, "kind": "property", "displayName": "Args", "group": 
"advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": 
false, "autowired": false, "secret": false, "description": "Specify arguments 
for configuring the different RabbitMQ concepts, a different prefix is required 
for each element: consumer. exchange. queue. binding. dlq.exchange. dlq.queue. 
dlq.binding. For example to [...]
+    "autowiredEnabled": { "index": 26, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
+    "ignoreDeclarationExceptions": { "index": 27, "kind": "property", 
"displayName": "Ignore Declaration Exceptions", "group": "advanced", "label": 
"advanced", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Switch on ignore exceptions such as mismatched 
properties when declaring" },
+    "messageConverter": { "index": 28, "kind": "property", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
+    "messagePropertiesConverter": { "index": 29, "kind": "property", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
+    "headerFilterStrategy": { "index": 30, "kind": "property", "displayName": 
"Header Filter Strategy", "group": "filter", "label": "filter", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "description": "To use a custom 
org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel 
message." }
   },
   "headers": {
     "CamelSpringRabbitmqRoutingOverrideKey": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "To override the endpoint 
configuration's routing key.", "constantName": 
"org.apache.camel.component.springrabbit.SpringRabbitMQConstants#ROUTING_OVERRIDE_KEY"
 },
@@ -79,22 +80,22 @@
   "properties": {
     "exchangeName": { "index": 0, "kind": "path", "displayName": "Exchange 
Name", "group": "common", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The exchange name 
determines the exchange to which the produced messages will be sent to. In the 
case of consumers, the exchange name determines the exchange the queue will be 
bound to. Note: to use default exchan [...]
     "connectionFactory": { "index": 1, "kind": "parameter", "displayName": 
"Connection Factory", "group": "common", "label": "common", "required": false, 
"type": "object", "javaType": 
"org.springframework.amqp.rabbit.connection.ConnectionFactory", "deprecated": 
false, "autowired": false, "secret": false, "description": "The connection 
factory to be use. A connection factory must be configured either on the 
component or endpoint." },
-    "disableReplyTo": { "index": 2, "kind": "parameter", "displayName": 
"Disable Reply To", "group": "common", "label": "common", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Specifies 
whether Camel ignores the ReplyTo header in messages. If true, Camel does not 
send a reply back to the destination specified in the ReplyTo header. You can 
use this option if you want Camel to c [...]
-    "routingKey": { "index": 3, "kind": "parameter", "displayName": "Routing 
Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "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." },
-    "testConnectionOnStartup": { "index": 4, "kind": "parameter", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Specifies whether to test the connection on startup. This 
ensures that when Camel starts that all the JMS consumers have a valid 
connection to the JMS broker. If a connection cannot be grante [...]
-    "acknowledgeMode": { "index": 5, "kind": "parameter", "displayName": 
"Acknowledge Mode", "group": "consumer", "label": "consumer", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.core.AcknowledgeMode", "enum": [ "NONE", "MANUAL", 
"AUTO" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Flag controlling the behaviour of the container with respect to 
message acknowledgement. The most common usage is to let the container handle 
the a [...]
-    "asyncConsumer": { "index": 6, "kind": "parameter", "displayName": "Async 
Consumer", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the consumer 
processes the Exchange asynchronously. If enabled then the consumer may pickup 
the next message from the queue, while the previous message is being processed 
asynchronously (by the A [...]
-    "autoDeclare": { "index": 7, "kind": "parameter", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting." },
-    "autoStartup": { "index": 8, "kind": "parameter", "displayName": "Auto 
Startup", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer container should auto-startup." },
-    "deadLetterExchange": { "index": 9, "kind": "parameter", "displayName": 
"Dead Letter Exchange", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter exchange" },
-    "deadLetterExchangeType": { "index": 10, "kind": "parameter", 
"displayName": "Dead Letter Exchange Type", "group": "consumer", "label": 
"consumer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "direct", "fanout", "headers", "topic" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"direct", "description": "The type of the dead letter exchange" },
-    "deadLetterQueue": { "index": 11, "kind": "parameter", "displayName": 
"Dead Letter Queue", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter queue" },
-    "deadLetterRoutingKey": { "index": 12, "kind": "parameter", "displayName": 
"Dead Letter Routing Key", "group": "consumer", "label": "consumer", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
routing key for the dead letter exchange" },
-    "exchangeType": { "index": 13, "kind": "parameter", "displayName": 
"Exchange Type", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "direct", "fanout", 
"headers", "topic" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "direct", "description": "The type of the exchange" },
-    "exclusive": { "index": 14, "kind": "parameter", "displayName": 
"Exclusive", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Set to true for 
an exclusive consumer" },
-    "maximumRetryAttempts": { "index": 15, "kind": "parameter", "displayName": 
"Maximum Retry Attempts", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 5, "description": "How many times a 
Rabbitmq consumer will retry the same message if Camel failed to process the 
message" },
-    "noLocal": { "index": 16, "kind": "parameter", "displayName": "No Local", 
"group": "consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Set to true for an no-local 
consumer" },
-    "queues": { "index": 17, "kind": "parameter", "displayName": "Queues", 
"group": "consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "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." },
+    "deadLetterExchange": { "index": 2, "kind": "parameter", "displayName": 
"Dead Letter Exchange", "group": "common", "label": "common", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The name of the dead 
letter exchange" },
+    "deadLetterExchangeType": { "index": 3, "kind": "parameter", 
"displayName": "Dead Letter Exchange Type", "group": "common", "label": 
"common", "required": false, "type": "string", "javaType": "java.lang.String", 
"enum": [ "direct", "fanout", "headers", "topic" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "direct", "description": 
"The type of the dead letter exchange" },
+    "deadLetterQueue": { "index": 4, "kind": "parameter", "displayName": "Dead 
Letter Queue", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The name of the dead letter queue" },
+    "deadLetterRoutingKey": { "index": 5, "kind": "parameter", "displayName": 
"Dead Letter Routing Key", "group": "common", "label": "common", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The routing key for the 
dead letter exchange" },
+    "disableReplyTo": { "index": 6, "kind": "parameter", "displayName": 
"Disable Reply To", "group": "common", "label": "common", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Specifies 
whether Camel ignores the ReplyTo header in messages. If true, Camel does not 
send a reply back to the destination specified in the ReplyTo header. You can 
use this option if you want Camel to c [...]
+    "queues": { "index": 7, "kind": "parameter", "displayName": "Queues", 
"group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The queue(s) to use for consuming or producing 
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." },
+    "routingKey": { "index": 8, "kind": "parameter", "displayName": "Routing 
Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "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." },
+    "testConnectionOnStartup": { "index": 9, "kind": "parameter", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Specifies whether to test the connection on startup. This 
ensures that when Camel starts that all the JMS consumers have a valid 
connection to the JMS broker. If a connection cannot be grante [...]
+    "acknowledgeMode": { "index": 10, "kind": "parameter", "displayName": 
"Acknowledge Mode", "group": "consumer", "label": "consumer", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.core.AcknowledgeMode", "enum": [ "NONE", "MANUAL", 
"AUTO" ], "deprecated": false, "autowired": false, "secret": false, 
"description": "Flag controlling the behaviour of the container with respect to 
message acknowledgement. The most common usage is to let the container handle 
the  [...]
+    "asyncConsumer": { "index": 11, "kind": "parameter", "displayName": "Async 
Consumer", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the consumer 
processes the Exchange asynchronously. If enabled then the consumer may pickup 
the next message from the queue, while the previous message is being processed 
asynchronously (by the  [...]
+    "autoDeclare": { "index": 12, "kind": "parameter", "displayName": "Auto 
Declare", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer should auto declare binding between exchange, queue and routing key 
when starting." },
+    "autoStartup": { "index": 13, "kind": "parameter", "displayName": "Auto 
Startup", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Specifies whether the 
consumer container should auto-startup." },
+    "exchangeType": { "index": 14, "kind": "parameter", "displayName": 
"Exchange Type", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "direct", "fanout", 
"headers", "topic" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "direct", "description": "The type of the exchange" },
+    "exclusive": { "index": 15, "kind": "parameter", "displayName": 
"Exclusive", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Set to true for 
an exclusive consumer" },
+    "maximumRetryAttempts": { "index": 16, "kind": "parameter", "displayName": 
"Maximum Retry Attempts", "group": "consumer", "label": "consumer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 5, "description": "How many times a 
Rabbitmq consumer will retry the same message if Camel failed to process the 
message" },
+    "noLocal": { "index": 17, "kind": "parameter", "displayName": "No Local", 
"group": "consumer", "label": "consumer", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Set to true for an no-local 
consumer" },
     "rejectAndDontRequeue": { "index": 18, "kind": "parameter", "displayName": 
"Reject And Dont Requeue", "group": "consumer", "label": "consumer", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether a Rabbitmq consumer should reject the message without 
requeuing. This enables failed messages to be sent to a Dead Letter 
Exchange\/Queue, if the broker is so configured." },
     "retryDelay": { "index": 19, "kind": "parameter", "displayName": "Retry 
Delay", "group": "consumer", "label": "consumer", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 1000, "description": "Delay in millis a 
Rabbitmq consumer will wait before redelivering a message that Camel failed to 
process" },
     "bridgeErrorHandler": { "index": 20, "kind": "parameter", "displayName": 
"Bridge Error Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Allows for bridging the consumer to the 
Camel routing Error Handler, which mean any exceptions (if possible) occurred 
while the Camel consumer is trying to pickup incoming [...]
@@ -106,14 +107,15 @@
     "prefetchCount": { "index": 26, "kind": "parameter", "displayName": 
"Prefetch Count", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "integer", "javaType": "java.lang.Integer", 
"deprecated": false, "autowired": false, "secret": false, "description": "Tell 
the broker how many messages to send in a single request. Often this can be set 
quite high to improve throughput." },
     "retry": { "index": 27, "kind": "parameter", "displayName": "Retry", 
"group": "consumer (advanced)", "label": "consumer,advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.retry.interceptor.RetryOperationsInterceptor", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Custom retry configuration to use. If this is configured then the other 
settings such as maximumRetryAttempts for retry are not in use." },
     "allowNullBody": { "index": 28, "kind": "parameter", "displayName": "Allow 
Null Body", "group": "producer", "label": "producer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Whether to allow 
sending messages with no body. If this option is false and the message body is 
null, then an MessageConversionException is thrown." },
-    "confirm": { "index": 29, "kind": "parameter", "displayName": "Confirm", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "enum": [ "auto", "enabled", "disabled" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"auto", "description": "Controls whether to wait for confirms. The connection 
factory must be configured for publisher confirms and this method. auto = Camel 
detects if the connection fac [...]
-    "confirmTimeout": { "index": 30, "kind": "parameter", "displayName": 
"Confirm Timeout", "group": "producer", "label": "producer", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "5000", "description": "Specify the 
timeout in milliseconds to be used when waiting for a message sent to be 
confirmed by RabbitMQ when doing send only messaging (InOnly). The default 
value is 5 seconds. A negative value indi [...]
-    "replyTimeout": { "index": 31, "kind": "parameter", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "30000", "description": "Specify the timeout 
in milliseconds to be used when waiting for a reply message when doing 
request\/reply (InOut) messaging. The default value is 30 seconds. A negative 
value indicates an indefinite timeo [...]
-    "usePublisherConnection": { "index": 32, "kind": "parameter", 
"displayName": "Use Publisher Connection", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Use a separate connection for publishers and consumers" 
},
-    "lazyStartProducer": { "index": 33, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "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 produ [...]
-    "args": { "index": 34, "kind": "parameter", "displayName": "Args", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": 
"arg.", "multiValue": true, "deprecated": false, "autowired": false, "secret": 
false, "description": "Specify arguments for configuring the different RabbitMQ 
concepts, a different prefix is required for each element: arg.consumer. 
arg.exchange. arg.queue. arg.bindin [...]
-    "messageConverter": { "index": 35, "kind": "parameter", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
-    "messagePropertiesConverter": { "index": 36, "kind": "parameter", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
-    "synchronous": { "index": 37, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Sets whether 
synchronous processing should be strictly used" }
+    "autoDeclareProducer": { "index": 29, "kind": "parameter", "displayName": 
"Auto Declare Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Specifies whether the producer should auto declare binding between exchange, 
queue and routing key when starting." },
+    "confirm": { "index": 30, "kind": "parameter", "displayName": "Confirm", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "enum": [ "auto", "enabled", "disabled" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"auto", "description": "Controls whether to wait for confirms. The connection 
factory must be configured for publisher confirms and this method. auto = Camel 
detects if the connection fac [...]
+    "confirmTimeout": { "index": 31, "kind": "parameter", "displayName": 
"Confirm Timeout", "group": "producer", "label": "producer", "required": false, 
"type": "duration", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "5000", "description": "Specify the 
timeout in milliseconds to be used when waiting for a message sent to be 
confirmed by RabbitMQ when doing send only messaging (InOnly). The default 
value is 5 seconds. A negative value indi [...]
+    "replyTimeout": { "index": 32, "kind": "parameter", "displayName": "Reply 
Timeout", "group": "producer", "label": "producer", "required": false, "type": 
"duration", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "30000", "description": "Specify the timeout 
in milliseconds to be used when waiting for a reply message when doing 
request\/reply (InOut) messaging. The default value is 30 seconds. A negative 
value indicates an indefinite timeo [...]
+    "usePublisherConnection": { "index": 33, "kind": "parameter", 
"displayName": "Use Publisher Connection", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Use a separate connection for publishers and consumers" 
},
+    "lazyStartProducer": { "index": 34, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "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 produ [...]
+    "args": { "index": 35, "kind": "parameter", "displayName": "Args", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": 
"arg.", "multiValue": true, "deprecated": false, "autowired": false, "secret": 
false, "description": "Specify arguments for configuring the different RabbitMQ 
concepts, a different prefix is required for each element: arg.consumer. 
arg.exchange. arg.queue. arg.bindin [...]
+    "messageConverter": { "index": 36, "kind": "parameter", "displayName": 
"Message Converter", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.springframework.amqp.support.converter.MessageConverter", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
MessageConverter so you can be in control how to map to\/from a 
org.springframework.amqp.core.Message." },
+    "messagePropertiesConverter": { "index": 37, "kind": "parameter", 
"displayName": "Message Properties Converter", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.springrabbit.MessagePropertiesConverter", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom MessagePropertiesConverter so you can be in control how to map 
to\/from a org.springframework.amqp.core.MessageProperties." },
+    "synchronous": { "index": 38, "kind": "parameter", "displayName": 
"Synchronous", "group": "advanced", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Sets whether 
synchronous processing should be strictly used" }
   }
 }
diff --git 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponent.java
 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponent.java
index e797d780b03..9610ef00e6e 100644
--- 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponent.java
+++ 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQComponent.java
@@ -53,10 +53,14 @@ public class SpringRabbitMQComponent extends 
HeaderFilterStrategyComponent {
     @Metadata(label = "consumer", defaultValue = "true",
               description = "Specifies whether the consumer container should 
auto-startup.")
     private boolean autoStartup = true;
-    @Metadata(label = "consumer", defaultValue = "false",
+    @Metadata(label = "consumer", defaultValue = "true",
               description = "Specifies whether the consumer should auto 
declare binding between exchange, queue and routing key when starting."
                             + " Enabling this can be good for development to 
make it easy to standup exchanges, queues and bindings on the broker.")
-    private boolean autoDeclare;
+    private boolean autoDeclare = true;
+    @Metadata(label = "producer", defaultValue = "false",
+              description = "Specifies whether the producer should auto 
declare binding between exchange, queue and routing key when starting."
+                            + " Enabling this can be good for development to 
make it easy to standup exchanges, queues and bindings on the broker.")
+    private boolean autoDeclareProducer;
     @Metadata(label = "advanced",
               description = "To use a custom MessageConverter so you can be in 
control how to map to/from a org.springframework.amqp.core.Message.")
     private MessageConverter messageConverter;
@@ -144,6 +148,7 @@ public class SpringRabbitMQComponent extends 
HeaderFilterStrategyComponent {
         endpoint.setMessagePropertiesConverter(messagePropertiesConverter);
         endpoint.setAutoStartup(autoStartup);
         endpoint.setAutoDeclare(autoDeclare);
+        endpoint.setAutoDeclareProducer(autoDeclareProducer);
         endpoint.setDeadLetterExchange(deadLetterExchange);
         endpoint.setDeadLetterExchangeType(deadLetterExchangeType);
         endpoint.setDeadLetterQueue(deadLetterQueue);
@@ -228,6 +233,14 @@ public class SpringRabbitMQComponent extends 
HeaderFilterStrategyComponent {
         this.autoDeclare = autoDeclare;
     }
 
+    public boolean isAutoDeclareProducer() {
+        return autoDeclareProducer;
+    }
+
+    public void setAutoDeclareProducer(boolean autoDeclareProducer) {
+        this.autoDeclareProducer = autoDeclareProducer;
+    }
+
     public String getDeadLetterExchange() {
         return deadLetterExchange;
     }
diff --git 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
index dc1e5e5f603..20efa25834b 100644
--- 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
+++ 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
@@ -84,9 +84,9 @@ public class SpringRabbitMQEndpoint extends DefaultEndpoint 
implements AsyncEndp
     @UriParam(label = "common",
               description = "The connection factory to be use. A connection 
factory must be configured either on the component or endpoint.")
     private ConnectionFactory connectionFactory;
-    @UriParam(label = "consumer",
-              description = "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.")
+    @UriParam(label = "common",
+              description = "The queue(s) to use for consuming or producing 
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.")
     private String queues;
     @UriParam(label = "consumer", defaultValue = "true",
               description = "Specifies whether the consumer container should 
auto-startup.")
@@ -130,13 +130,13 @@ public class SpringRabbitMQEndpoint extends 
DefaultEndpoint implements AsyncEndp
     private boolean exclusive;
     @UriParam(label = "consumer", description = "Set to true for an no-local 
consumer")
     private boolean noLocal;
-    @UriParam(label = "consumer", description = "The name of the dead letter 
exchange")
+    @UriParam(label = "common", description = "The name of the dead letter 
exchange")
     private String deadLetterExchange;
-    @UriParam(label = "consumer", description = "The name of the dead letter 
queue")
+    @UriParam(label = "common", description = "The name of the dead letter 
queue")
     private String deadLetterQueue;
-    @UriParam(label = "consumer", description = "The routing key for the dead 
letter exchange")
+    @UriParam(label = "common", description = "The routing key for the dead 
letter exchange")
     private String deadLetterRoutingKey;
-    @UriParam(label = "consumer", defaultValue = "direct", enums = 
"direct,fanout,headers,topic",
+    @UriParam(label = "common", defaultValue = "direct", enums = 
"direct,fanout,headers,topic",
               description = "The type of the dead letter exchange")
     private String deadLetterExchangeType = "direct";
     @UriParam(label = "common",
@@ -146,6 +146,9 @@ public class SpringRabbitMQEndpoint extends DefaultEndpoint 
implements AsyncEndp
                             + " handles the reply message. You can also use 
this option if you want to use Camel as a proxy between different"
                             + " message brokers and you want to route message 
from one system to another.")
     private boolean disableReplyTo;
+    @UriParam(label = "producer",
+              description = "Specifies whether the producer should auto 
declare binding between exchange, queue and routing key when starting.")
+    private boolean autoDeclareProducer;
     @UriParam(label = "producer", javaType = "java.time.Duration", 
defaultValue = "30000",
               description = "Specify the timeout in milliseconds to be used 
when waiting for a reply message when doing request/reply (InOut) messaging."
                             + " The default value is 30 seconds. A negative 
value indicates an indefinite timeout (Beware that this will cause a memory 
leak if a reply is not received).")
@@ -244,6 +247,14 @@ public class SpringRabbitMQEndpoint extends 
DefaultEndpoint implements AsyncEndp
         this.autoDeclare = autoDeclare;
     }
 
+    public boolean isAutoDeclareProducer() {
+        return autoDeclareProducer;
+    }
+
+    public void setAutoDeclareProducer(boolean autoDeclareProducer) {
+        this.autoDeclareProducer = autoDeclareProducer;
+    }
+
     public boolean isAsyncConsumer() {
         return asyncConsumer;
     }
@@ -610,10 +621,13 @@ public class SpringRabbitMQEndpoint extends 
DefaultEndpoint implements AsyncEndp
     }
 
     public void declareElements(AbstractMessageListenerContainer container) {
-        AmqpAdmin admin = null;
         if (container instanceof MessageListenerContainer) {
-            admin = ((MessageListenerContainer) container).getAmqpAdmin();
+            AmqpAdmin admin = ((MessageListenerContainer) 
container).getAmqpAdmin();
+            declareElements(container, admin);
         }
+    }
+
+    public void declareElements(AbstractMessageListenerContainer container, 
AmqpAdmin admin) {
         if (admin != null && autoDeclare) {
             // bind dead letter exchange
             if (deadLetterExchange != null) {
@@ -711,7 +725,7 @@ public class SpringRabbitMQEndpoint extends DefaultEndpoint 
implements AsyncEndp
                 String qn = admin.declareQueue(rabbitQueue);
 
                 // if we auto created a new unique queue then the container 
needs to know the queue name
-                if (generateUniqueQueue) {
+                if (generateUniqueQueue && container != null) {
                     container.setQueueNames(qn);
                 }
 
diff --git 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQProducer.java
 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQProducer.java
index 73712e16f8c..59f05bfa21e 100644
--- 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQProducer.java
+++ 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQProducer.java
@@ -27,12 +27,14 @@ import org.apache.camel.FailedToCreateProducerException;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.AmqpAdmin;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.MessageProperties;
 import org.springframework.amqp.rabbit.AsyncRabbitTemplate;
 import org.springframework.amqp.rabbit.RabbitMessageFuture;
 import org.springframework.amqp.rabbit.connection.Connection;
 import org.springframework.amqp.rabbit.connection.RabbitUtils;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 
 public class SpringRabbitMQProducer extends DefaultAsyncProducer {
@@ -80,6 +82,16 @@ public class SpringRabbitMQProducer extends 
DefaultAsyncProducer {
         if (getEndpoint().isTestConnectionOnStartup()) {
             testConnectionOnStartup();
         }
+        if (getEndpoint().isAutoDeclareProducer()) {
+            // auto declare but without spring
+            AmqpAdmin admin = getEndpoint().getComponent().getAmqpAdmin();
+            if (admin == null) {
+                RabbitAdmin ra = new 
RabbitAdmin(getEndpoint().getConnectionFactory());
+                
ra.setIgnoreDeclarationExceptions(getEndpoint().getComponent().isIgnoreDeclarationExceptions());
+                admin = ra;
+            }
+            getEndpoint().declareElements(null, admin);
+        }
     }
 
     @Override
diff --git 
a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerAutoDeclareIT.java
 
b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerAutoDeclareIT.java
new file mode 100644
index 00000000000..b932c776f06
--- /dev/null
+++ 
b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerAutoDeclareIT.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.springrabbit.integration;
+
+import java.nio.charset.Charset;
+import java.util.Map;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.springrabbit.SpringRabbitMQConstants;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.amqp.core.AmqpTemplate;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageBuilder;
+import org.springframework.amqp.core.MessageDeliveryMode;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.core.MessagePropertiesBuilder;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+
+public class RabbitMQProducerAutoDeclareIT extends RabbitMQITSupport {
+
+    @Test
+    public void testProducer() throws Exception {
+        ConnectionFactory cf = 
context.getRegistry().lookupByNameAndType("myCF", ConnectionFactory.class);
+
+        template.sendBody("direct:start", "Hello World");
+
+        AmqpTemplate template = new RabbitTemplate(cf);
+        String out = (String) template.receiveAndConvert("myqueue");
+        Assertions.assertEquals("Hello World", out);
+    }
+
+    @Test
+    public void testProducerWithHeader() throws Exception {
+        ConnectionFactory cf = 
context.getRegistry().lookupByNameAndType("myCF", ConnectionFactory.class);
+
+        template.sendBodyAndHeader("direct:start", "Hello World", "cheese", 
"gouda");
+
+        AmqpTemplate template = new RabbitTemplate(cf);
+        Message out = template.receive("myqueue");
+
+        byte[] body = out.getBody();
+        Assertions.assertNotNull(body, "The body should not be null");
+        Assertions.assertEquals("Hello World", new String(body));
+        Assertions.assertEquals("gouda", 
out.getMessageProperties().getHeader("cheese"));
+    }
+
+    @Test
+    public void testProducerWithMessage() throws Exception {
+        ConnectionFactory cf = 
context.getRegistry().lookupByNameAndType("myCF", ConnectionFactory.class);
+
+        MessageProperties props = MessagePropertiesBuilder.newInstance()
+                .setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN)
+                .setMessageId("123")
+                .setHeader("bar", "baz")
+                .build();
+        Message body = MessageBuilder.withBody("foo".getBytes())
+                .andProperties(props)
+                .build();
+
+        template.sendBody("direct:start", body);
+
+        AmqpTemplate template = new RabbitTemplate(cf);
+        Message out = template.receive("myqueue");
+        Assertions.assertEquals("foo", new String(out.getBody()));
+        Assertions.assertEquals("baz", 
out.getMessageProperties().getHeader("bar"));
+    }
+
+    @Test
+    public void testProducerWithMessageProperties() throws Exception {
+        ConnectionFactory cf = 
context.getRegistry().lookupByNameAndType("myCF", ConnectionFactory.class);
+
+        template.sendBodyAndHeaders("direct:start", "<price>123</price>",
+                Map.of(SpringRabbitMQConstants.DELIVERY_MODE, 
MessageDeliveryMode.PERSISTENT,
+                        SpringRabbitMQConstants.TYPE, "price",
+                        SpringRabbitMQConstants.CONTENT_TYPE, 
"application/xml",
+                        SpringRabbitMQConstants.MESSAGE_ID, 
"0fe9c142-f9c1-426f-9237-f5a4c988a8ae",
+                        SpringRabbitMQConstants.PRIORITY, 1));
+
+        AmqpTemplate template = new RabbitTemplate(cf);
+        Message out = template.receive("myqueue");
+
+        final MessageProperties messageProperties = out.getMessageProperties();
+        Assertions.assertNotNull(messageProperties, "The message properties 
should not be null");
+        String encoding = messageProperties.getContentEncoding();
+        Assertions.assertEquals(Charset.defaultCharset().name(), encoding);
+        Assertions.assertEquals("<price>123</price>", new 
String(out.getBody(), encoding));
+        Assertions.assertEquals(MessageDeliveryMode.PERSISTENT, 
messageProperties.getReceivedDeliveryMode());
+        Assertions.assertEquals("price", messageProperties.getType());
+        Assertions.assertEquals("application/xml", 
messageProperties.getContentType());
+        Assertions.assertEquals("0fe9c142-f9c1-426f-9237-f5a4c988a8ae", 
messageProperties.getMessageId());
+        Assertions.assertEquals(1, messageProperties.getPriority());
+        Assertions.assertEquals(0, messageProperties.getHeaders().size());
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        
.to("spring-rabbitmq:foo?autoDeclareProducer=true&routingKey=foo.bar.#&queues=myqueue&exchangeType=topic");
+            }
+        };
+    }
+}
diff --git 
a/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerSimpleIT.java
 
b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerSimpleIT.java
new file mode 100644
index 00000000000..e479a1c97c3
--- /dev/null
+++ 
b/components/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerSimpleIT.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.springrabbit.integration;
+
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class RabbitMQProducerSimpleIT extends RabbitMQITSupport {
+
+    @Test
+    public void testProducer() throws Exception {
+        template.sendBody("direct:start", "Hello World");
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .to("spring-rabbitmq:simple");
+            }
+        };
+    }
+}
diff --git 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java
 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java
index c517e611dd7..85a8fda1d10 100644
--- 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java
+++ 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SpringRabbitmqComponentBuilderFactory.java
@@ -113,7 +113,7 @@ public interface SpringRabbitmqComponentBuilderFactory {
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
-         * Default: false
+         * Default: true
          * Group: consumer
          * 
          * @param autoDeclare the value to set
@@ -429,6 +429,25 @@ public interface SpringRabbitmqComponentBuilderFactory {
             doSetProperty("allowNullBody", allowNullBody);
             return this;
         }
+        /**
+         * Specifies whether the producer should auto declare binding between
+         * exchange, queue and routing key when starting. Enabling this can be
+         * good for development to make it easy to standup exchanges, queues 
and
+         * bindings on the broker.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer
+         * 
+         * @param autoDeclareProducer the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitmqComponentBuilder autoDeclareProducer(
+                boolean autoDeclareProducer) {
+            doSetProperty("autoDeclareProducer", autoDeclareProducer);
+            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
@@ -618,6 +637,7 @@ public interface SpringRabbitmqComponentBuilderFactory {
             case "retry": ((SpringRabbitMQComponent) 
component).setRetry((org.springframework.retry.interceptor.RetryOperationsInterceptor)
 value); return true;
             case "shutdownTimeout": ((SpringRabbitMQComponent) 
component).setShutdownTimeout((long) value); return true;
             case "allowNullBody": ((SpringRabbitMQComponent) 
component).setAllowNullBody((boolean) value); return true;
+            case "autoDeclareProducer": ((SpringRabbitMQComponent) 
component).setAutoDeclareProducer((boolean) value); return true;
             case "lazyStartProducer": ((SpringRabbitMQComponent) 
component).setLazyStartProducer((boolean) value); return true;
             case "replyTimeout": ((SpringRabbitMQComponent) 
component).setReplyTimeout((long) value); return true;
             case "args": ((SpringRabbitMQComponent) 
component).setArgs((java.util.Map) value); return true;
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SpringRabbitMQEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SpringRabbitMQEndpointBuilderFactory.java
index 5ff2b0488a3..49311462da8 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SpringRabbitMQEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SpringRabbitMQEndpointBuilderFactory.java
@@ -78,6 +78,67 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("connectionFactory", connectionFactory);
             return this;
         }
+        /**
+         * The name of the dead letter exchange.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param deadLetterExchange the value to set
+         * @return the dsl builder
+         */
+        default 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: common
+         * 
+         * @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: common
+         * 
+         * @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: common
+         * 
+         * @param deadLetterRoutingKey the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder deadLetterRoutingKey(
+                String deadLetterRoutingKey) {
+            doSetProperty("deadLetterRoutingKey", deadLetterRoutingKey);
+            return this;
+        }
         /**
          * Specifies whether Camel ignores the ReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
@@ -125,6 +186,22 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
+        /**
+         * The queue(s) to use for consuming or producing 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.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param queues the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointConsumerBuilder queues(String queues) {
+            doSetProperty("queues", queues);
+            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
@@ -356,67 +433,6 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("autoStartup", autoStartup);
             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.
          * 
@@ -530,22 +546,6 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             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;
-        }
         /**
          * Whether a Rabbitmq consumer should reject the message without
          * requeuing. This enables failed messages to be sent to a Dead Letter
@@ -1090,6 +1090,67 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("connectionFactory", connectionFactory);
             return this;
         }
+        /**
+         * The name of the dead letter exchange.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param deadLetterExchange the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder deadLetterExchange(
+                String deadLetterExchange) {
+            doSetProperty("deadLetterExchange", deadLetterExchange);
+            return this;
+        }
+        /**
+         * The type of the dead letter exchange.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: direct
+         * Group: common
+         * 
+         * @param deadLetterExchangeType the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder deadLetterExchangeType(
+                String deadLetterExchangeType) {
+            doSetProperty("deadLetterExchangeType", deadLetterExchangeType);
+            return this;
+        }
+        /**
+         * The name of the dead letter queue.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param deadLetterQueue the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder deadLetterQueue(
+                String deadLetterQueue) {
+            doSetProperty("deadLetterQueue", deadLetterQueue);
+            return this;
+        }
+        /**
+         * The routing key for the dead letter exchange.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param deadLetterRoutingKey the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder deadLetterRoutingKey(
+                String deadLetterRoutingKey) {
+            doSetProperty("deadLetterRoutingKey", deadLetterRoutingKey);
+            return this;
+        }
         /**
          * Specifies whether Camel ignores the ReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
@@ -1137,6 +1198,22 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
+        /**
+         * The queue(s) to use for consuming or producing 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.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param queues the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder queues(String queues) {
+            doSetProperty("queues", queues);
+            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
@@ -1232,6 +1309,41 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("allowNullBody", allowNullBody);
             return this;
         }
+        /**
+         * Specifies whether the producer 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: false
+         * Group: producer
+         * 
+         * @param autoDeclareProducer the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder autoDeclareProducer(
+                boolean autoDeclareProducer) {
+            doSetProperty("autoDeclareProducer", autoDeclareProducer);
+            return this;
+        }
+        /**
+         * Specifies whether the producer 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: false
+         * Group: producer
+         * 
+         * @param autoDeclareProducer the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointProducerBuilder autoDeclareProducer(
+                String autoDeclareProducer) {
+            doSetProperty("autoDeclareProducer", autoDeclareProducer);
+            return this;
+        }
         /**
          * Controls whether to wait for confirms. The connection factory must 
be
          * configured for publisher confirms and this method. auto = Camel
@@ -1616,6 +1728,67 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("connectionFactory", connectionFactory);
             return this;
         }
+        /**
+         * The name of the dead letter exchange.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param deadLetterExchange the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder deadLetterExchange(
+                String deadLetterExchange) {
+            doSetProperty("deadLetterExchange", deadLetterExchange);
+            return this;
+        }
+        /**
+         * The type of the dead letter exchange.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: direct
+         * Group: common
+         * 
+         * @param deadLetterExchangeType the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder deadLetterExchangeType(
+                String deadLetterExchangeType) {
+            doSetProperty("deadLetterExchangeType", deadLetterExchangeType);
+            return this;
+        }
+        /**
+         * The name of the dead letter queue.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param deadLetterQueue the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder deadLetterQueue(
+                String deadLetterQueue) {
+            doSetProperty("deadLetterQueue", deadLetterQueue);
+            return this;
+        }
+        /**
+         * The routing key for the dead letter exchange.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param deadLetterRoutingKey the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder deadLetterRoutingKey(
+                String deadLetterRoutingKey) {
+            doSetProperty("deadLetterRoutingKey", deadLetterRoutingKey);
+            return this;
+        }
         /**
          * Specifies whether Camel ignores the ReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
@@ -1663,6 +1836,22 @@ public interface SpringRabbitMQEndpointBuilderFactory {
             doSetProperty("disableReplyTo", disableReplyTo);
             return this;
         }
+        /**
+         * The queue(s) to use for consuming or producing 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.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param queues the value to set
+         * @return the dsl builder
+         */
+        default SpringRabbitMQEndpointBuilder queues(String queues) {
+            doSetProperty("queues", queues);
+            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
diff --git 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SpringRabbitmqUriDsl.kt
 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SpringRabbitmqUriDsl.kt
index c5e7f35184b..40c79b496ab 100644
--- 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SpringRabbitmqUriDsl.kt
+++ 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/SpringRabbitmqUriDsl.kt
@@ -49,6 +49,22 @@ public class SpringRabbitmqUriDsl(
     it.property("connectionFactory", connectionFactory)
   }
 
+  public fun deadLetterExchange(deadLetterExchange: String) {
+    it.property("deadLetterExchange", deadLetterExchange)
+  }
+
+  public fun deadLetterExchangeType(deadLetterExchangeType: String) {
+    it.property("deadLetterExchangeType", deadLetterExchangeType)
+  }
+
+  public fun deadLetterQueue(deadLetterQueue: String) {
+    it.property("deadLetterQueue", deadLetterQueue)
+  }
+
+  public fun deadLetterRoutingKey(deadLetterRoutingKey: String) {
+    it.property("deadLetterRoutingKey", deadLetterRoutingKey)
+  }
+
   public fun disableReplyTo(disableReplyTo: String) {
     it.property("disableReplyTo", disableReplyTo)
   }
@@ -57,6 +73,10 @@ public class SpringRabbitmqUriDsl(
     it.property("disableReplyTo", disableReplyTo.toString())
   }
 
+  public fun queues(queues: String) {
+    it.property("queues", queues)
+  }
+
   public fun routingKey(routingKey: String) {
     it.property("routingKey", routingKey)
   }
@@ -97,22 +117,6 @@ public class SpringRabbitmqUriDsl(
     it.property("autoStartup", autoStartup.toString())
   }
 
-  public fun deadLetterExchange(deadLetterExchange: String) {
-    it.property("deadLetterExchange", deadLetterExchange)
-  }
-
-  public fun deadLetterExchangeType(deadLetterExchangeType: String) {
-    it.property("deadLetterExchangeType", deadLetterExchangeType)
-  }
-
-  public fun deadLetterQueue(deadLetterQueue: String) {
-    it.property("deadLetterQueue", deadLetterQueue)
-  }
-
-  public fun deadLetterRoutingKey(deadLetterRoutingKey: String) {
-    it.property("deadLetterRoutingKey", deadLetterRoutingKey)
-  }
-
   public fun exchangeType(exchangeType: String) {
     it.property("exchangeType", exchangeType)
   }
@@ -141,10 +145,6 @@ public class SpringRabbitmqUriDsl(
     it.property("noLocal", noLocal.toString())
   }
 
-  public fun queues(queues: String) {
-    it.property("queues", queues)
-  }
-
   public fun rejectAndDontRequeue(rejectAndDontRequeue: String) {
     it.property("rejectAndDontRequeue", rejectAndDontRequeue)
   }
@@ -217,6 +217,14 @@ public class SpringRabbitmqUriDsl(
     it.property("allowNullBody", allowNullBody.toString())
   }
 
+  public fun autoDeclareProducer(autoDeclareProducer: String) {
+    it.property("autoDeclareProducer", autoDeclareProducer)
+  }
+
+  public fun autoDeclareProducer(autoDeclareProducer: Boolean) {
+    it.property("autoDeclareProducer", autoDeclareProducer.toString())
+  }
+
   public fun confirm(confirm: String) {
     it.property("confirm", confirm)
   }

Reply via email to