24 lines
1.7 KiB
Plaintext
24 lines
1.7 KiB
Plaintext
[[retry-with-the-rabbitmq-binder]]
|
|
= Retry With the RabbitMQ Binder
|
|
|
|
When retry is enabled within the binder, the listener container thread is suspended for any back off periods that are configured.
|
|
This might be important when strict ordering is required with a single consumer. However, for other use cases, it prevents other messages from being processed on that thread.
|
|
An alternative to using binder retry is to set up dead lettering with time to live on the dead-letter queue (DLQ) as well as dead-letter configuration on the DLQ itself.
|
|
See "`xref:rabbit/rabbit_overview/binder-properties.adoc[RabbitMQ Binder Properties]`" for more information about the properties discussed here.
|
|
You can use the following example configuration to enable this feature:
|
|
|
|
* Set `autoBindDlq` to `true`.
|
|
The binder create a DLQ.
|
|
Optionally, you can specify a name in `deadLetterQueueName`.
|
|
* Set `dlqTtl` to the back off time you want to wait between redeliveries.
|
|
* Set the `dlqDeadLetterExchange` to the default exchange.
|
|
Expired messages from the DLQ are routed to the original queue, because the default `deadLetterRoutingKey` is the queue name (`destination.group`).
|
|
Setting to the default exchange is achieved by setting the property with no value, as shown in the next example.
|
|
|
|
To force a message to be dead-lettered, either throw an `AmqpRejectAndDontRequeueException` or set `requeueRejected` to `false` (the default) and throw any exception.
|
|
|
|
The loop continue without end, which is fine for transient problems, but you may want to give up after some number of attempts.
|
|
Fortunately, RabbitMQ provides the `x-death` header, which lets you determine how many cycles have occurred.
|
|
|
|
To acknowledge a message after giving up, throw an `ImmediateAcknowledgeAmqpException`.
|