التعامل مع الأخطاء والمحاولات مجددًا أمر مهم لمستهلكي RabbitMQ الموثوقين — حيث يتعلق الأمر بالقرار الذي يجب اتخاذه عند فشل معالجة الرسالة (محاولة مجددًا، أو إرسال إلى طابور الرسائل غير المسلمة، أو التجاهل). يمنع التعامل الصحيح مع الأخطاء فقدان الرسائل والمستهلكين العالقين.
المشكلة
When a consumer fails to process a message (bad data, downstream failure, bug):
→ requeue forever → a "poison" message blocks the queue (retried endlessly)
→ discard → message LOST
→ crash → reprocess, possibly stuck again
→ need a deliberate strategy.
استراتيجيات المحاولة مجددًا
✓ NACK + REQUEUE → reject and requeue for retry (but limit retries — don't requeue forever)
✓ RETRY WITH BACKOFF → retry transient failures with increasing delays (e.g. via a delayed
retry queue with TTL → requeue after a delay)
✓ RETRY LIMIT → track attempts; after N failures → DEAD LETTER (don't retry forever)
✓ Distinguish TRANSIENT (retry) vs PERMANENT (dead-letter immediately) failures
