비동기 통신 (Asynchronous messaging)
비동기 메시지를 처리하기 위해 Rabbit MQ의 exchange 를 활용할 경우, 업무의 필요성에 따라 다양한 형태의 아키텍처 설계가 가능합니다.
- exchange
메시지를 목표 큐로 라이팅 하기 위해 사용합니다. 일대일(direct), 일대 그룹(topic), 전체 (fanout) 형태의 라우팅할 수 있습니다. - queue
메시지가 일시적으로 잔류하는 메모리 공간 입니다. 데이타베이스 등의 매체에 상기 보존이 필요할 경우 MQ는 별도의 로직을 작성하여야 합니다. 카프카의 경우 기본 적으로 파일에 저장하므로 retention 기간을 따로 줄 필요가 없습니다. - binding
exchange 가 어느 큐로 갈 지 queue와 엮는 과정입니다. - route key
exchange에 메시지가 도착했을 때 메시지 종류에 따라 목적 큐를 달리 할 수 있습니다. 하나의 큐를 리스닝 하는 여러 소비자 중 route key가 일치하는 소비자에게만 메시지가 전송됩니다.
출처: https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html)
1) 메시지 생산자 (Message Producer)
MQ로 메시지를 발송하는 모듈입니다.
2) 메시지 소비자 (Message Consumer)
지목한 큐에 메시지가 도착했을 때 발동되는 처리부입니다.
3) 작업자 큐 (Worker Queue)
하나의 마이크로 서비스가 타 마이크로 서비스에 서비스를 제공할 필요가 있을 때 자신의 큐를 통해 비동기 서비스를 제공할 수 있습니다.
4) Dead Letter Queue
AmqpRejectAndDontRequeException이 발생하거나 사용자에 의해 작성된 dead letter exchange로 메시지가 전송되면 dead letter queue로 메시지가 쌓입니다.
DLQ의 메시지는 일반적으로 재가공이 불가능한 완전히 죽은 메시지(poison message) 입니다. requeue 가 불가능한 플래그가 있을 경우, 또는 큐 사이즈를 초과하는 메시지를 DLQ로 집어 넣을 수 있습니다.
5) direct/topic/fanout exchange
생산자는 작업큐가 리스닝하고 있는 exchange에 메시지를 발송합니다.
메시지 오류 처리
큐를 리스팅 하고 있는 소비자에서 오류가 발생할 경우 큐에 적재된 메시지 처리를 위한 정책이 아래와 같이 정의되어 있습니다.
1) ABORT
오류가 발생한 메시지는 큐에서 DLQ로 이동하지 않고 일방적으로 제거됩니다.
2) BY PASS
오류가 발생한 메시지는 큐에서 제거되고 실패처리되어 DLQ로 이동합니다.
3) BLOCK
오류가 발생한 메시지를 포함한 큐는 추가적으로 전송되는 메시지를 수신하지만, 메시지에 대한 소비를 하지 못합니다.
'참고' 카테고리의 다른 글
쿠키 vs 세션 ? (0) | 2021.07.06 |
---|---|
Redis Architecture OverView (0) | 2021.06.27 |
[AWS]ElastiCache (0) | 2021.06.27 |
HTTP 응답 상태 코드 (0) | 2021.06.24 |
[MQ] KafKa (0) | 2021.06.10 |
댓글