It is common for a temporary outage or database deadlock to cause a message to fail to process; but the chances are if it is tried a few more times with some time delay then it will complete fine. So we typically wish to use some kind of redelivery policy to decide how many times to try redeliver a message and how long to wait before redelivery attempts.
The RedeliveryPolicy defines how the message is to be redelivered. You can customize things like
how many times a message is attempted to be redelivered before it is considered a failure and sent to the dead letter channel
the initial redelivery timeout
whether or not exponential backoff is used (i.e. the time between retries increases using a backoff multiplier)
whether to use collision avoidance to add some randomness to the timings
delay pattern, see below for details.
Once all attempts at redelivering the message fails then the message is forwarded to the dead letter queue.