This section contains settings specific to the RabbitMQ Binder and bound channels.
For general binding configuration options and properties, see the Spring Cloud Stream core documentation.
By default, the RabbitMQ binder uses Spring Boot’s ConnectionFactory
.
Conseuqently, it supports all Spring Boot configuration options for RabbitMQ.
(For reference, see the Spring Boot documentation).
RabbitMQ configuration options use the spring.rabbitmq
prefix.
In addition to Spring Boot options, the RabbitMQ binder supports the following properties:
A comma-separated list of RabbitMQ management plugin URLs.
Only used when nodes
contains more than one entry.
Each entry in this list must have a corresponding entry in spring.rabbitmq.addresses
.
Only needed if you use a RabbitMQ cluster and wish to consume from the node that hosts the queue.
See Queue Affinity and the LocalizedQueueConnectionFactory for more information.
Default: empty.
A comma-separated list of RabbitMQ node names.
When more than one entry, used to locate the server address where a queue is located.
Each entry in this list must have a corresponding entry in spring.rabbitmq.addresses
.
Only needed if you use a RabbitMQ cluster and wish to consume from the node that hosts the queue.
See Queue Affinity and the LocalizedQueueConnectionFactory for more information.
Default: empty.
The compression level for compressed bindings.
See java.util.zip.Deflater
.
Default: 1
(BEST_LEVEL).
A connection name prefix used to name the connection(s) created by this binder.
The name is this prefix followed by #n
, where n
increments each time a new connection is opened.
Default: none (Spring AMQP default).
The following properties are available for Rabbit consumers only and must be prefixed with spring.cloud.stream.rabbit.bindings.<channelName>.consumer.
.
The acknowledge mode.
Default: AUTO
.
Whether to automatically declare the DLQ and bind it to the binder DLX.
Default: false
.
The routing key with which to bind the queue to the exchange (if bindQueue
is true
).
For partitioned destinations, -<instanceIndex>
is appended.
Default: #
.
Whether to declare the queue and bind it to the destination exchange.
Set it to false
if you have set up your own infrastructure and have previously created and bound the queue.
Default: true
.
Used to create the consumer tag(s); will be appended by #n
where n
increments for each consumer created.
Example: ${spring.application.name}-${spring.cloud.stream.bindings.input.group}-${spring.cloud.stream.instance-index}
.
Default: none - the broker will generate random consumer tags.
Select the type of listener container to be used. See Choosing a Container in the Spring AMQP documentation for more information.
Default: simple
The name of the DLQ
Default: prefix+destination.dlq
A DLX to assign to the queue.
Relevant only if autoBindDlq
is true
.
Default: 'prefix+DLX'
The type of the DLX to assign to the queue.
Relevant only if autoBindDlq
is true
.
Default: 'direct'
A dead letter routing key to assign to the queue.
Relevant only if autoBindDlq
is true
.
Default: destination
Whether to declare the dead letter exchange for the destination.
Relevant only if autoBindDlq
is true
.
Set to false
if you have a pre-configured DLX.
Default: true
.
Whether to declare the exchange for the destination.
Default: true
.
Whether to declare the exchange as a Delayed Message Exchange
.
Requires the delayed message exchange plugin on the broker.
The x-delayed-type
argument is set to the exchangeType
.
Default: false
.
If a DLQ is declared, a DLX to assign to that queue.
Default: none
If a DLQ is declared, a dead letter routing key to assign to that queue.
Default: none
How long before an unused dead letter queue is deleted (in milliseconds).
Default: no expiration
Declare the dead letter queue with the x-queue-mode=lazy
argument.
See “Lazy Queues”.
Consider using a policy instead of this setting, because using a policy allows changing the setting without deleting the queue.
Default: false
.
Maximum number of messages in the dead letter queue.
Default: no limit
Maximum number of total bytes in the dead letter queue from all messages.
Default: no limit
Maximum priority of messages in the dead letter queue (0-255).
Default: none
Action to take when dlqMaxLength
or dlqMaxLengthBytes
is exceeded; currently drop-head
or reject-publish
but refer to the RabbitMQ documentation.
Default: none
Default time to live to apply to the dead letter queue when declared (in milliseconds).
Default: no limit
Whether the subscription should be durable.
Only effective if group
is also set.
Default: true
.
If declareExchange
is true, whether the exchange should be auto-deleted (that is, removed after the last queue is removed).
Default: true
.
If declareExchange
is true, whether the exchange should be durable (that is, it survives broker restart).
Default: true
.
The exchange type: direct
, fanout
or topic
for non-partitioned destinations and direct
or topic
for partitioned destinations.
Default: topic
.
Whether to create an exclusive consumer.
Concurrency should be 1 when this is true
.
Often used when strict ordering is required but enabling a hot standby instance to take over after a failure.
See recoveryInterval
, which controls how often a standby instance attempts to consume.
Default: false
.
How long before an unused queue is deleted (in milliseconds).
Default: no expiration
The interval (in milliseconds) between attempts to consume from a queue if it is missing.
Default: 5000
The number of bytes to reserve for other headers when adding the stack trace to a DLQ message header.
All headers must fit within the frame_max
size configured on the broker.
Stack traces can be large; if the size plus this property exceeds frame_max
then the stack trace will be truncated.
A WARN log will be written; consider increasing the frame_max
or reducing the stack trace by catching the exception and throwing one with a smaller stack trace.
Default: 20000
Patterns for headers to be mapped from inbound messages.
Default: ['*']
(all headers).
Declare the queue with the x-queue-mode=lazy
argument.
See “Lazy Queues”.
Consider using a policy instead of this setting, because using a policy allows changing the setting without deleting the queue.
Default: false
.
The maximum number of consumers.
Not supported when the containerType
is direct
.
Default: 1
.
The maximum number of messages in the queue.
Default: no limit
The maximum number of total bytes in the queue from all messages.
Default: no limit
The maximum priority of messages in the queue (0-255).
Default: none
When the queue cannot be found, whether to treat the condition as fatal and stop the listener container.
Defaults to false
so that the container keeps trying to consume from the queue — for example, when using a cluster and the node hosting a non-HA queue is down.
Default: false
Action to take when maxLength
or maxLengthBytes
is exceeded; currently drop-head
or reject-publish
but refer to the RabbitMQ documentation.
Default: none
Prefetch count.
Default: 1
.
A prefix to be added to the name of the destination
and queues.
Default: "".
The number of times to retry consuming from a queue if it is missing.
Relevant only when missingQueuesFatal
is true
.
Otherwise, the container keeps retrying indefinitely.
Not supported when the containerType
is direct
.
Default: 3
When true, consume from a queue with a name equal to the group
.
Otherwise the queue name is destination.group
.
This is useful, for example, when using Spring Cloud Stream to consume from an existing RabbitMQ queue.
Default: false.
The interval between connection recovery attempts, in milliseconds.
Default: 5000
.
Whether delivery failures should be re-queued when retry is disabled or republishToDlq
is false
.
Default: false
.
When republishToDlq
is true
, specifies the delivery mode of the republished message.
Default: DeliveryMode.PERSISTENT
By default, messages that fail after retries are exhausted are rejected.
If a dead-letter queue (DLQ) is configured, RabbitMQ routes the failed message (unchanged) to the DLQ.
If set to true
, the binder republishs failed messages to the DLQ with additional headers, including the exception message and stack trace from the cause of the final failure.
Also see the frameMaxHeadroom property.
Default: false
Whether to use transacted channels.
Default: false
.
Default time to live to apply to the queue when declared (in milliseconds).
Default: no limit
The number of deliveries between acks.
Not supported when the containerType
is direct
.
Default: 1
.
To set listener container properties that are not exposed as binder or binding properties, add a single bean of type ListenerContainerCustomizer
to the application context.
The binder and binding properties will be set and then the customizer will be called.
The customizer (configure()
method) is provided with the queue name as well as the consumer group as arguments.
The following properties are available for Rabbit producers only and
must be prefixed with spring.cloud.stream.rabbit.bindings.<channelName>.producer.
.
Whether to automatically declare the DLQ and bind it to the binder DLX.
Default: false
.
Whether to enable message batching by producers.
Messages are batched into one message according to the following properties (described in the next three entries in this list): 'batchSize', batchBufferLimit
, and batchTimeout
.
See Batching for more information.
Default: false
.
The number of messages to buffer when batching is enabled.
Default: 100
.
The maximum buffer size when batching is enabled.
Default: 10000
.
The batch timeout when batching is enabled.
Default: 5000
.
The routing key with which to bind the queue to the exchange (if bindQueue
is true
).
Only applies to non-partitioned destinations.
Only applies if requiredGroups
are provided and then only to those groups.
Default: #
.
Whether to declare the queue and bind it to the destination exchange.
Set it to false
if you have set up your own infrastructure and have previously created and bound the queue.
Only applies if requiredGroups
are provided and then only to those groups.
Default: true
.
Whether data should be compressed when sent.
Default: false
.
When errorChannelEnabled
is true, a channel to which to send positive delivery acknowledgments (aka publisher confirms).
If the channel does not exist, a DirectChannel
is registered with this name.
The connection factory must be configured to enable publisher confirms.
Default: nullChannel
(acks are discarded).
The name of the DLQ
Only applies if requiredGroups
are provided and then only to those groups.
Default: prefix+destination.dlq
A DLX to assign to the queue.
Relevant only when autoBindDlq
is true
.
Applies only when requiredGroups
are provided and then only to those groups.
Default: 'prefix+DLX'
The type of the DLX to assign to the queue.
Relevant only if autoBindDlq
is true
.
Applies only when requiredGroups
are provided and then only to those groups.
Default: 'direct'
A dead letter routing key to assign to the queue.
Relevant only when autoBindDlq
is true
.
Applies only when requiredGroups
are provided and then only to those groups.
Default: destination
Whether to declare the dead letter exchange for the destination.
Relevant only if autoBindDlq
is true
.
Set to false
if you have a pre-configured DLX.
Applies only when requiredGroups
are provided and then only to those groups.
Default: true
.
Whether to declare the exchange for the destination.
Default: true
.
A SpEL expression to evaluate the delay to apply to the message (x-delay
header).
It has no effect if the exchange is not a delayed message exchange.
Default: No x-delay
header is set.
Whether to declare the exchange as a Delayed Message Exchange
.
Requires the delayed message exchange plugin on the broker.
The x-delayed-type
argument is set to the exchangeType
.
Default: false
.
The delivery mode.
Default: PERSISTENT
.
When a DLQ is declared, a DLX to assign to that queue.
Applies only if requiredGroups
are provided and then only to those groups.
Default: none
When a DLQ is declared, a dead letter routing key to assign to that queue.
Applies only when requiredGroups
are provided and then only to those groups.
Default: none
How long (in milliseconds) before an unused dead letter queue is deleted.
Applies only when requiredGroups
are provided and then only to those groups.
Default: no expiration
x-queue-mode=lazy
argument.
See “Lazy Queues”.
Consider using a policy instead of this setting, because using a policy allows changing the setting without deleting the queue.
Applies only when requiredGroups
are provided and then only to those groups.Maximum number of messages in the dead letter queue.
Applies only if requiredGroups
are provided and then only to those groups.
Default: no limit
Maximum number of total bytes in the dead letter queue from all messages.
Applies only when requiredGroups
are provided and then only to those groups.
Default: no limit
Maximum priority of messages in the dead letter queue (0-255)
Applies only when requiredGroups
are provided and then only to those groups.
Default: none
Default time (in milliseconds) to live to apply to the dead letter queue when declared.
Applies only when requiredGroups
are provided and then only to those groups.
Default: no limit
If declareExchange
is true
, whether the exchange should be auto-delete (it is removed after the last queue is removed).
Default: true
.
If declareExchange
is true
, whether the exchange should be durable (survives broker restart).
Default: true
.
The exchange type: direct
, fanout
or topic
for non-partitioned destinations and direct
or topic
for partitioned destinations.
Default: topic
.
How long (in milliseconds) before an unused queue is deleted.
Applies only when requiredGroups
are provided and then only to those groups.
Default: no expiration
Patterns for headers to be mapped to outbound messages.
Default: ['*']
(all headers).
Declare the queue with the x-queue-mode=lazy
argument.
See “Lazy Queues”.
Consider using a policy instead of this setting, because using a policy allows changing the setting without deleting the queue.
Applies only when requiredGroups
are provided and then only to those groups.
Default: false
.
Maximum number of messages in the queue.
Applies only when requiredGroups
are provided and then only to those groups.
Default: no limit
Maximum number of total bytes in the queue from all messages.
Only applies if requiredGroups
are provided and then only to those groups.
Default: no limit
Maximum priority of messages in the queue (0-255).
Only applies if requiredGroups
are provided and then only to those groups.
Default: none
A prefix to be added to the name of the destination
exchange.
Default: "".
When true
, consume from a queue with a name equal to the group
.
Otherwise the queue name is destination.group
.
This is useful, for example, when using Spring Cloud Stream to consume from an existing RabbitMQ queue.
Applies only when requiredGroups
are provided and then only to those groups.
Default: false.
A SpEL expression to determine the routing key to use when publishing messages.
For a fixed routing key, use a literal expression, such as routingKeyExpression='my.routingKey'
in a properties file or routingKeyExpression: '''my.routingKey'''
in a YAML file.
Default: destination
or destination-<partition>
for partitioned destinations.
Whether to use transacted channels.
Default: false
.
Default time (in milliseconds) to live to apply to the queue when declared.
Applies only when requiredGroups
are provided and then only to those groups.
Default: no limit
Note | |
---|---|
In the case of RabbitMQ, content type headers can be set by external applications. Spring Cloud Stream supports them as part of an extended internal protocol used for any type of transport — including transports, such as Kafka (prior to 0.11), that do not natively support headers. |