AMQP란?
AMQP(Advanced Message Queuing Protocol)는 메시지 지향 미들웨어에서 사용되는 개방형 표준 프로토콜입니다.
이 프로토콜은 애플리케이션 간에 메시지를 안정적이고 효율적으로 전달하기 위한 규격을 제공합니다.
AMQP는 메시징 큐를 중심으로 애플리케이션 간의 비동기식 통신을 가능하게 하여, 분산 시스템 간의 상호작용을 원활하게 만들어 줍니다.
AMQP의 동작
Producer(생산자)
- 메시지를 생성하고, 이를 큐에 전송하는 역할
- 생산자는 일반적으로 다른 시스템이나 애플리케이션으로부터 데이터를 받아 메시지 형식으로 변환하여 큐로 전송
Consumer(소비자)
- 큐에 저장된 메시지를 읽어 처리하는 역할
Queue(큐)
- Consumer가 메시지를 Consume 하기 전까지 보관하는 장소
Exchange(교환기)
- Publisher로부터 수신한 메시지를 적절한 큐 혹은 다른 Exchange로 분배하는 라우터의 기능
Binding(바인딩)
- Exchange와 Queue의 매핑
- 1:1 혹은 1:N
AMQP Exchange 종류
AMQP에서 Exchange는 메시지를 Queue로 라우팅하는 역할을 한다.
메시지는 생산자(Producer)에서 Exchange로 전달되고, Exchange는 해당 메시지를 어떤 큐로 보낼지 결정한다.
AMQP는 다양한 Exchange Type을 제공하여 메시지가 어떻게 라우팅될지를 설정할 수 있다.
Direct Exchange
메시지의 라우팅 키를 1:N으로 매칭시키는 방법이다.
Topic Exchange
라우팅 키를 패턴 기반으로 처리해 메시지를 라우팅한다.
라우팅 키는 마침표(.)로 구분된 단어들로 구성되며, *과 # 같은 와일드 카드를 사용해 패턴을 지정할 수 있다.
- "*" : 하나의 단어를 대체
- "#" : 여러 단어를 대체
Fanout Exchange
모든 메시지를 모든 큐로 라우팅한다.
Headers Exchange
메시지의 헤더 정보를 바탕으로 라우팅을 결정한다.
큐를 바인딩할 때 x-match로 헤더를 어떤 식으로 해석하고 바인딩할지 결장한다.
x-match가 all이면 모든 조건을 충족해야 하고, any이면 하나라도 충족하면 된다.
AMQP 수신 확인 모델
AMQP의 메시지 전송은 기본적으로 비동기적이며, 메시지가 큐에서 소비자에게 전송되면 소비자는 이를 처리한 후, 메시지가 성공적으로 처리되었음을 브로커에 알리기 위해 수신 확인을 보낸다.
자동 수신 확인 (Auto Acknowledgment)
- 소비자가 메시지를 받자마자 자동으로 수신 확인을 보내는 방식
- 소비자가 메시지를 처리한 후, 성공/실패 여부와 상관없이 브로커가 자동으로 메시지를 '처리됨'으로 간주하고 큐에서 제거
- 소비자가 예기치 않게 실패하면 메시지가 손실될 수 있음
수동 수신 확인 (Manual Acknowledgment)
- 소비자가 메시지를 수신한 후, 메시지를 처리했다는 것을 명시적으로 브로커에 알리는 방식
- 메시지 처리에 실패한 경우 브로커에게 메시지를 다시 큐에 넣을 수 있도록 요청할 수 있음
배치 수신 확인 (Batch Acknowledgment)
- 여러 메시지를 한 번에 확인하는 방식
참고 자료
'Programming > SpringBoot' 카테고리의 다른 글
[10k-Chat] Spring Boot 실시간 채팅 서버 구현 (2) - WAS 이중화 (0) | 2025.02.08 |
---|---|
[10k-Chat] Spring Boot 실시간 채팅 서버 구현 (1) - Stomp (0) | 2025.01.19 |
[SpringBoot] JPA 동적 스키마 (1) | 2024.11.06 |
[SpringBoot] @ModelAttribute 작동 원리 (0) | 2024.07.17 |
[SpringBoot] Entity의 ID를 테스트에서 삽입하는 방법 (0) | 2024.06.02 |