**Prefetch(QoS)**는 consumer가 한 번에 보유할 수 있는 미확인(unacknowledged) 메시지 수를 제한하여, 작업 분배를 제어하고 한 consumer가 과부하되는 동안 다른 consumer가 놀고 있는 것을 방지합니다. 공정하고 효율적인 메시지 처리에 중요합니다.
prefetch가 하는 일
PREFETCH (QoS - prefetch count) → consumer가 한 번에 가질 수 있는 미확인(UNACKNOWLEDGED)
메시지 수를 제한:
→ 없으면 → RabbitMQ가 한 consumer에게 많은 메시지를 dispatch할 수 있음 (배치로 가져감)
→ prefetch=N이면 → consumer가 한 번에 최대 N개의 미확인 메시지를 가짐 (더 받으려면 ack 필요)
→ 메시지가 어떻게 분배되고 consumer가 얼마나 버퍼링하는지 제어
prefetch가 중요한 이유 (공정한 dispatch)
prefetch가 없거나 너무 높으면:
✗ 한 consumer가 (처리가 느린 것까지) 많은 메시지를 가져가고 다른 consumer는 노는 수 있음
→ 불공정한 분배, 부족한 부하 분산
적절한 prefetch가 있으면:
✓ 공정한 DISPATCH → 메시지가 더 고르게 분배됨 (바쁜 consumer가 메시지를 쌓지 않음)
✓ 느린 consumer는 더 적게 보유; 빠른 consumer는 더 많이 받음 (가용 consumer로 작업 흐름)
→ prefetch는 consumer 간 공정하고 효율적인 작업 분배를 가능하게 함
