RabbitMQ یا ربیتامکیو یک Message Broker است که پیامها را از Producer دریافت میکند و براساس Exchange، Binding و Routing Key به Queueهای مناسب هدایت میکند. این ابزار برای پردازش کارهای پسزمینه، اعلانها و جداکردن سرویسها مفید است.
اصطلاحات مهم
| مفهوم | وظیفه |
|---|---|
| Exchange | دریافت پیام و تصمیم مسیر |
| Queue | نگهداری پیام منتظر پردازش |
| Binding | اتصال Exchange و Queue |
| Routing Key | کلید انتخاب مقصد |
| Acknowledgement | تایید پردازش مصرفکننده |
| Prefetch | حداکثر پیامهای تحویلدادهشده اما Ackنشده |
| DLQ | صف پیامهای شکستخورده یا ردشده |
چهار نوع پرکاربرد Exchange
| نوع | رفتار |
|---|---|
| Direct | تطبیق دقیق Routing Key |
| Topic | تطبیق الگوی کلید با wildcard |
| Fanout | انتشار به همه Queueهای متصل |
| Headers | مسیر براساس Headerها |
# Requires: pip install pika; RabbitMQ at localhost
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='order.receipts', durable=True)
channel.basic_publish(
exchange='', routing_key='order.receipts',
body=b'{"order_id":42}',
properties=pika.BasicProperties(delivery_mode=2),
)
connection.close()
ماندگاری صف و پیام، Acknowledgement، Retry، DLQ و کنترل Idempotency باید با نیاز پروژه تنظیم شوند. تفاوت RabbitMQ با کافکا فقط سرعت نیست و به مدل مصرف رویداد مربوط است.
اصطلاحات مرتبط: کافکا، مسیج بروکر، صف پیام، صف پیامهای ناموفق، تحویل حداقل یکبار پیام.