Skip to content

RabbitMQ ‐ DeadLetterQueue와 DeadLetterExchange

dnwls16071 edited this page Mar 18, 2025 · 1 revision

📚 DeadLetterQueue와 DeadLetterExchange

  • DLQ : 메시지가 큐에서 제대로 처리 되지 못할 경우 DLQ에 의해 이동되며, 실패한 메시지를 저장하는 용도로 사용
    • NACK : 처리나 거부
    • TTL 만료 : 메시지 TTL이 만료된 경우 DLQ로 이동
    • 큐 설정 초과(오버플로우) : 큐에 설정된 최대 메시지 갯수를 초과하면 가장 오래된 메시지가 삭제되고 DLQ로 이동
  • DLX : 큐 실패시에 DLX를 통해 메시지가 처리되지 못한 경우 지정된 큐로 이동시킬 수 있다.

📚 RetryTemplate을 통한 간편한 재처리 설정 방법

  • RetryTemplate
    • Spring AMQP는 RetryTemplate을 통해 재시도 로직을 지원한다.
    • 최대 3번 재시도 후에도 실패하면 Spring이 메시지를 DLQ로 이동시킨다.
  • AcknowledgeMode.AUTO
    • 재시도 중 메시지가 성공적으로 처리되면 Spring AMQP가 자동으로 Ack 전송
    • 모든 재시도가 실패하면 Nack를 보내고 RabbitMQ가 메시지를 DLQ로 이동
    • DLQ에서 메시지 수정한 뒤 원래 큐로 재전송하여 정상 처리
@Configuration
public class RetryConfig {

	@Bean
	public RetryTemplate retryTemplate() {
		RetryTemplate retryTemplate = new RetryTemplate();

		// 재시도 정책 설정 : 최대 3번 시도
		SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
		retryPolicy.setMaxAttempts(3);

		// 백오프 정책 설정 : 재시도 간격 1초
		FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
		backOffPolicy.setBackOffPeriod(1000L);
		retryTemplate.setRetryPolicy(retryPolicy);
		retryTemplate.setBackOffPolicy(backOffPolicy);
		return retryTemplate;
	}
}

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally