Skip to content

Dead Letter Queue implementation example using RabbitMQ and Spring

Notifications You must be signed in to change notification settings

dherik/spring-rabbitmq-dead-letter-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

spring-rabbitmq-dead-letter-example

Dead Letter Queue implementation example using RabbitMQ and Spring.

Build

You need a RabbitMQ running to be able to run the examples.

With a RabbitMQ running, just:

mvn clean install

There are two examples of Consumer and Producer with DLQ. If you need more details, just read the Spring documentation section about Exception Handling

Introduction

The exception AmqpRejectAndDontRequeueException

Very useful to control errors from business rules. When you would like to reject the message, you can just throw the AmqpRejectAndDontRequeueException. Remember that any other exception will put the message again in the main queue, creating a infinite loop by default.

With the configuration to pass the rejected messages to a DLQ queue (as implemented in this project), the messages that cause a AmqpRejectAndDontRequeueException will be redirected to the DLQ, waiting for some action (to be analyzed, redelivered, etc)

Some quotes about the exception from Spring documentation:

[...] you can throw a AmqpRejectAndDontRequeueException; this prevents message requeuing, regardless of the setting of the defaultRequeueRejected property.

[...] the listener can throw an AmqpRejectAndDontRequeueException to conditionally control this behavior.

The DefaultRequeueRejected flag from SimpleMessageListenerContainer

This configuration is more safer than the AmqpRejectAndDontRequeueException if you have fear about errors with the content-type of the message. Listeners that throws any Exception (included AmqpRejectAndDontRequeueException) will be redirected to the DLQ queue.

Some quotes about the flag from Spring documentation:

Setting defaultRequeueRejected to false will cause messages to be discarded (or routed to a dead letter exchange).

[...] When a message that cannot be converted is encountered (for example an invalid content_encoding header), some exceptions are thrown before the message reaches user code. With defaultRequeueRejected set to true (default), such messages would be redelivered over and over.

About

Dead Letter Queue implementation example using RabbitMQ and Spring

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published