Publish/Subscribe با Fanout Exchange

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

یکی از الگوهای رایج در سیستم‌های پیام‌رسانی Publish/Subscribe است که در آن پیام‌ها توسط یک Producer منتشر شده و به چندین Consumer همزمان ارسال می‌شوند. در RabbitMQ، این الگو با استفاده از Fanout Exchange پیاده‌سازی می‌شود.

ایجاد Fanout Exchange و صف‌ها

ابتدا باید یک Exchange از نوع Fanout تعریف کرده و چند Queue به آن متصل کنیم. همه پیام‌ها بدون توجه به Routing Key به تمامی Queueهای متصل ارسال می‌شوند.

import pika

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

# تعریف Fanout Exchange
channel.exchange_declare(exchange='logs', exchange_type='fanout')

# تعریف و اتصال صف‌ها
channel.queue_declare(queue='queue1')
channel.queue_declare(queue='queue2')
channel.queue_bind(exchange='logs', queue='queue1')
channel.queue_bind(exchange='logs', queue='queue2')

ارسال پیام‌ها (Publisher)

پیام‌ها به Exchange ارسال می‌شوند و Exchange آن‌ها را به همه Queueهای متصل پخش می‌کند:

message = "پیام Broadcast"
channel.basic_publish(exchange='logs',
                      routing_key='',
                      body=message)
print("پیام ارسال شد")
connection.close()

دریافت پیام‌ها (Subscriber)

هر Consumer که به یکی از Queueها متصل است، پیام را دریافت و پردازش می‌کند:

def callback(ch, method, properties, body):
    print(f"پیام دریافت شد: {body.decode()}")

channel.basic_consume(queue='queue1',
                      on_message_callback=callback,
                      auto_ack=True)

print('در انتظار پیام‌ها...')
channel.start_consuming()

ویژگی‌های Publish/Subscribe با Fanout

  • پیام‌ها به تمامی Queueهای متصل به Exchange ارسال می‌شوند.
  • Routing Key نادیده گرفته می‌شود و برای Fanout Exchange نیازی به آن نیست.
  • برای ارسال اطلاعات عمومی یا Broadcast به چندین مصرف‌کننده مناسب است.

جمع‌بندی

Fanout Exchange ساده‌ترین روش برای پیاده‌سازی الگوی Publish/Subscribe در RabbitMQ است. با این روش می‌توان پیام‌ها را به صورت همزمان به چندین Consumer ارسال کرد و اطلاعات عمومی یا اعلان‌ها را در سیستم‌های توزیع‌شده منتشر نمود.

ثبت دیدگاه


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

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


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