Performance: Dead letter queues
MEDIUM IMPACT
Dead letter queues affect message processing reliability and system responsiveness by isolating failed messages to prevent blocking main queues.
springboot application configured with dead letter queue to isolate failed messages: @Bean public Queue mainQueue() { return QueueBuilder.durable("mainQueue") .withArgument("x-dead-letter-exchange", "dlxExchange") .withArgument("x-dead-letter-routing-key", "dlq") .build(); } @Bean public Queue deadLetterQueue() { return new Queue("dlq"); } @Bean public DirectExchange dlxExchange() { return new DirectExchange("dlxExchange"); } @Bean public Binding dlqBinding() { return BindingBuilder.bind(deadLetterQueue()).to(dlxExchange()).with("dlq"); } @Bean public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.setQueueNames("mainQueue"); container.setMessageListener(message -> { // process message // on failure, message routed to DLQ automatically try { // processing logic } catch (Exception e) { throw new AmqpRejectAndDontRequeueException("Failed processing"); } }); return container; }
springboot application consuming messages without dead letter queue configuration, causing retries to block main queue processing:
@Bean
public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames("mainQueue");
container.setMessageListener(message -> {
// process message
// on failure, exception thrown without DLQ
throw new RuntimeException("Processing failed");
});
return container;
}| Pattern | Message Blocking | Retries | System Throughput | Verdict |
|---|---|---|---|---|
| No Dead Letter Queue | High - failed messages block queue | Repeated retries on main queue | Reduced due to blocking | [X] Bad |
| With Dead Letter Queue | Low - failed messages isolated | Retries routed to DLQ | Improved throughput and responsiveness | [OK] Good |