Acknowledgement
특징
- RabbitMQ에서 소비자(Consumer)가 메시지를 정상적으로 수신했고 처리했음을 RabbitMQ 서버에 알리기 위해서 Acknowledgement라는 개념을 사용합니다. Acknowledgement는 메시지를 받은 동일한 Channel을 통해 보내집니다.
- 이 매커니즘은 RabbitMQ에서 신뢰성을 보장하는 중요한 부분입니다. RabbitMQ는 Auto-Acknowledgement와 Manual-Acknowledgement가 존재합니다.
- Auto-Acknowledgement의 경우, 메시지 처리의 성공 여부와 무관하게 자동으로 처리된 것으로 간주합니다.
- Manual-Acknowledgement는 소비자가 명시적으로 처리 성공 또는 실패를 알리는 절차를 통해 메세지의 처리 여부를 판단합니다.
Auto-Acknowledgement
동작방식
- Publisher가 RabbitMQ에 메세지를 발행합니다.
- 발행된 메세지는 RabbitMQ의 Queue에 저장됩니다.
- RabbitMQ는 Queue에서 메세지를 선택하여 Consumer에게 전달하기 위해 준비합니다.
- RabbitMQ는 네트워크를 통해 선택된 메세지를 Consumer의 Channel로 전달을 시도합니다. 이 과정에서 네트워크 문제나 다른 이유로 메세지 전달이 실패할 수 있습니다.
- 메세지가 Consumer에게 전달되는 순간, RabbitMQ는 자동으로 Acknowledgement를 수신한 것으로 간주하고 메시지를 큐에서 제거합니다. 실제로 Consumer 애플리케이션에 메시지가 도달하지 않았다 하더라도, RabbitMQ는 메시지가 성공적으로 처리된 것으로 간주합니다.
- Consumer 애플리케이션에서는 실제로 메시지를 수신하여 처리합니다. 문제가 발생하더라도 RabbitMQ는 이미 메시지를 처리된 것으로 간주하고 있기 때문에, 메시지를 다시 전송하지 않습니다.
특징
- Auto 모드의 특징은 Consumer에게 메세지를 전달하면 반드시 처리 여부를 전달합니다.
- 다양한 이유로 메세지가 유실되더라도 메시지는 처리된 것으로 간주되어 큐에서 제거될 수 있습니다.
- 이는 메시지 손실의 위험을 내포하고 있습니다.
- 신뢰성보다 처리량에 중점을 두는 경우에 사용하는 것이 바람직합니다.
- 메시지 처리량을 최대화하고 시스템의 성능을 높일 수 있습니다.
Manual-Acknowledgement
동작방식
- Publisher가 RabbitMQ에 메세지를 발행합니다.
- 발행된 메세지는 RabbitMQ의 Queue에 저장됩니다.
- RabbitMQ는 Queue에서 메세지를 선택하여 Consumer에게 전달하기 위해 준비합니다.
- RabbitMQ는 네트워크를 통해 선택된 메세지를 Consumer의 Channel로 전달을 시도합니다. 이 과정에서 네트워크 문제나 다른 이유로 메세지 전달이 실패할 수 있습니다.
- Consumer 애플리케이션에서는 실제로 메시지를 수신하여 처리합니다.
- 메세지를 성공적으로 처리하면 ack를 실패하면 nack 또는 reject을 전송합니다.
- RabbitMQ는 Acknowledgement를 수신하면 Queue에서 메세지를 제거하거나 재처리합니다.
특징
- Manual 모드의 특징은 처리 여부를 사용자가 직접 보내야 합니다.
- 다양한 케이스에 대해 예외 처리가 중요하게 작용합니다.
- 메세지가 유실되는 상황에서는 TPS를 고려하여 적절한 TTL을 설정하여 비정상적으로 오랜시간 Queue에 머무는 메세지에 대한 처리 방식을 선택 할 수 있습니다.
- 메세지를 수신했지만, 내부적인 로직에 따라 실패가 발생한 상황에 대해 처리 방식을 선택 할 수 있습니다.
- 재처리 방식에는 Requeue 또는 Dead Lettering Queue를 이용한 방식이 있을 수 있습니다.
'Queue System' 카테고리의 다른 글
RabbitMQ (3) (0) | 2024.01.24 |
---|---|
RabbitMQ (2) (0) | 2024.01.23 |
RabbitMQ (1) (0) | 2024.01.22 |
Message Queue vs Event Queue (1) | 2024.01.21 |