در RabbitMQ، Exchange مسئول مسیریابی پیامها از Producer به صفها (Queues) است. انواع مختلفی از Exchange وجود دارد که هر کدام الگوی مسیریابی متفاوتی ارائه میدهند: Direct، Fanout، Topic و Headers.
Direct Exchange
Direct Exchange پیامها را بر اساس Routing Key دقیق به صفهای مشخص هدایت میکند. تنها صفهایی که Routing Key آنها با کلید پیام مطابقت داشته باشد پیام را دریافت میکنند.
# ایجاد Direct Exchange و صف
channel.exchange_declare(exchange='direct_logs', exchange_type='direct')
channel.queue_declare(queue='error_logs')
channel.queue_bind(exchange='direct_logs', queue='error_logs', routing_key='error')
Fanout Exchange
Fanout Exchange پیامها را بدون توجه به Routing Key به همه صفهای متصل پخش میکند. این نوع Exchange برای انتشار پیام به چندین مصرفکننده کاربرد دارد.
# ایجاد Fanout Exchange
channel.exchange_declare(exchange='broadcast', exchange_type='fanout')
channel.queue_declare(queue='queue1')
channel.queue_declare(queue='queue2')
channel.queue_bind(exchange='broadcast', queue='queue1')
channel.queue_bind(exchange='broadcast', queue='queue2')
Topic Exchange
Topic Exchange پیامها را بر اساس الگوهای متنی (Wildcard) Routing Key هدایت میکند. این نوع Exchange انعطافپذیری بالایی در مسیریابی دارد.
# ایجاد Topic Exchange
channel.exchange_declare(exchange='topic_logs', exchange_type='topic')
channel.queue_declare(queue='queue_critical')
channel.queue_bind(exchange='topic_logs', queue='queue_critical', routing_key='*.critical')
Headers Exchange
Headers Exchange پیامها را بر اساس هدرهای پیام هدایت میکند، نه Routing Key. این نوع برای سناریوهایی که مسیریابی پیچیده با پارامترهای متنوع نیاز دارند مناسب است.
# ایجاد Headers Exchange
channel.exchange_declare(exchange='header_logs', exchange_type='headers')
channel.queue_declare(queue='queue_header')
channel.queue_bind(exchange='header_logs', queue='queue_header', arguments={'x-match':'all', 'format':'pdf', 'type':'report'})
جمعبندی
انتخاب نوع Exchange به نوع مسیریابی پیامها بستگی دارد. Direct برای مسیریابی دقیق، Fanout برای انتشار همزمان، Topic برای الگوهای پیچیده و Headers برای مسیریابی بر اساس پارامترهای متنوع استفاده میشوند. درک درست این انواع، طراحی سیستمهای پیامرسانی انعطافپذیر و کارآمد را ممکن میسازد.