Routing Key یکی از مهمترین مفاهیم RabbitMQ است که تعیین میکند پیامها چگونه از Exchange به Queue هدایت شوند. با استفاده از Routing Key، میتوان پیامها را به صفهای مشخص یا گروهی از صفها منتقل کرد.
نحوه عملکرد Routing Key
وقتی Producer پیامی را به یک Exchange ارسال میکند، Exchange با توجه به نوع خود و Bindingها، Routing Key پیام را بررسی کرده و تصمیم میگیرد که پیام به کدام Queue ارسال شود.
مثال با Direct Exchange
در Direct Exchange، پیام فقط به صفهایی ارسال میشود که Routing Key آنها دقیقاً با کلید پیام مطابقت داشته باشد:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# تعریف Exchange و Queue
channel.exchange_declare(exchange='direct_logs', exchange_type='direct')
channel.queue_declare(queue='error_queue')
channel.queue_bind(exchange='direct_logs', queue='error_queue', routing_key='error')
# ارسال پیام با Routing Key
channel.basic_publish(exchange='direct_logs',
routing_key='error',
body='پیام خطا!')
print("پیام ارسال شد")
connection.close()
مثال با Topic Exchange
در Topic Exchange میتوان از الگوهای متنی (Wildcards) استفاده کرد. این امکان مسیریابی پیچیده و انعطافپذیر فراهم میکند:
channel.exchange_declare(exchange='topic_logs', exchange_type='topic')
channel.queue_declare(queue='critical_logs')
channel.queue_bind(exchange='topic_logs', queue='critical_logs', routing_key='*.critical')
# ارسال پیام با Routing Key مطابق با الگو
channel.basic_publish(exchange='topic_logs',
routing_key='system.critical',
body='پیام بحرانی سیستم')
نکات مهم
- Routing Key در Direct Exchange باید دقیقاً مطابق با کلید Binding باشد.
- در Topic Exchange، از کاراکتر
*
برای یک بخش و#
برای چند بخش استفاده میشود. - استفاده صحیح از Routing Key باعث مسیریابی دقیق و جلوگیری از ارسال پیام به صفهای غیر مرتبط میشود.
جمعبندی
Routing Key ابزار اصلی هدایت پیامها در RabbitMQ است. با ترکیب آن با انواع Exchange و Bindingها، میتوان سیستمهای پیامرسانی دقیق، مقیاسپذیر و انعطافپذیر طراحی کرد که پیامها فقط به صفهای مورد نظر برسند.