مدیریت خطا و Dead Letter Queue

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/06/25
  • تعداد بازدید: 3

در سیستم‌های پیام‌رسانی، احتمال بروز خطا در پردازش پیام‌ها توسط Consumer وجود دارد. RabbitMQ مکانیزمی به نام Dead Letter Queue (DLQ) ارائه می‌دهد که پیام‌هایی که پردازش آن‌ها با خطا مواجه شده یا از دست رفته‌اند را ذخیره می‌کند تا بعداً بررسی یا پردازش شوند.

مکانیزم Dead Letter Queue

وقتی یک پیام به دلایل مختلف مانند Rejected شدن، Expired شدن یا رسیدن به محدودیت تکرار (TTL) از صف اصلی خارج می‌شود، می‌توان آن را به یک صف اختصاصی به نام Dead Letter Queue ارسال کرد.

ایجاد Dead Letter Queue

ابتدا باید یک صف برای پیام‌های مرده تعریف کنیم و سپس صف اصلی را به گونه‌ای تنظیم کنیم که پیام‌های ناموفق به آن هدایت شوند:

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

# تعریف Dead Letter Queue
channel.queue_declare(queue='dead_letter_queue', durable=True)

# تعریف صف اصلی با Dead Letter Exchange
channel.queue_declare(queue='main_queue',
                      durable=True,
                      arguments={
                          'x-dead-letter-exchange': '',  # استفاده از default exchange
                          'x-dead-letter-routing-key': 'dead_letter_queue'
                      })

مدیریت خطا در Consumer

در هنگام پردازش پیام‌ها، اگر خطایی رخ دهد می‌توان پیام را رد (Reject) کرد تا به Dead Letter Queue منتقل شود:

def callback(ch, method, properties, body):
    try:
        process_message(body)
        ch.basic_ack(delivery_tag=method.delivery_tag)
    except Exception as e:
        print(f"خطا در پردازش پیام: {e}")
        ch.basic_nack(delivery_tag=method.delivery_tag, requeue=False)  # پیام به DLQ می‌رود

مزایای استفاده از Dead Letter Queue

  • پیام‌های ناموفق ذخیره می‌شوند و از بین نمی‌روند.
  • امکان بررسی و تحلیل خطاها و پیام‌های مشکل‌دار وجود دارد.
  • سیستم اصلی می‌تواند بدون توقف ادامه به پردازش سایر پیام‌ها دهد.

جمع‌بندی

Dead Letter Queue ابزاری مهم برای مدیریت خطا در RabbitMQ است. با استفاده از آن می‌توان پیام‌های ناموفق را ذخیره، بررسی و دوباره پردازش کرد و تضمین کرد که سیستم پیام‌رسانی مقاوم و پایدار باقی بماند.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.