**Acknowledgment(ack)**는 메시지가 성공적으로 처리되었음을 RabbitMQ에 알려 queue에서 제거할 수 있게 합니다. 이는 신뢰성 있는 전달 — consumer가 실패해도 메시지가 손실되지 않도록 보장하는 것 — 에 필수적입니다.
acknowledgment 동작 방식
consumer가 메시지를 받아 처리하면 ACKNOWLEDGE함:
→ ACK → "이 메시지를 처리했음" → RabbitMQ가 queue에서 제거
→ consumer가 ack 전에 사망(크래시, 연결 끊김) → RabbitMQ가 메시지를 REQUEUE
→ 다른 consumer에게 재전달 (손실되지 않음)
→ ack는 메시지가 신뢰성 있게 처리됨을 보장 (consumer 실패 시에도 손실 없음)
manual vs automatic ack
MANUAL ack → consumer가 처리 AFTER에 명시적으로 ack → 신뢰성 있음 (처리 실패 시 재전달)
— 중요한 메시지에는 안전한 선택
AUTOMATIC ack → 메시지가 DELIVER되자마자(처리 전) ack된 것으로 간주
→ 빠르지만 UNSAFE → 처리 중 consumer가 크래시하면 메시지 LOST
→ 신뢰성을 위해 MANUAL ack 사용 (성공적으로 처리한 후에만 ack)
