**ربیت ام کیو**  (انگلیسی: RabbitMQ) یک نرم‌افزار کارگزار پیام منبع باز (گاهی اوقات میان‌افزار پیام‌محور خوانده می‌شود) است که در اصل پروتکل صف بندی پیام پیشرفته (انگلیسی: Advanced Message Queuing Protocol) یا AMQP را پیاده‌سازی کرده‌است اما پس از آن اقدام به گسترش پروتکل‌های پشتیبانی شده خود با معماری افزونه ای (انگلیسی: plug-in protocol) برای پروتکل پیام جریان-متن محور (انگلیسی: Streaming Text Oriented Messaging Protocol) یا STOMP، پروتکل MQTT و سایر پروتکل‌ها نموده است. سرور ربیت ام کیو به زبان ارلنگ نوشته شده‌است و روی بستر چارچوب Open Telecom Platform ساخته شده‌است. کتابخانه‌های سمت کلاینت که واسطی برای ارتباط با کارگزار فراهم می‌کنند برای زبان‌های برنامه‌نویسی مشهور وجود دارد.

تاریخچه
-------

در ابتدا شرکت Rabbit Technologies Ltd اقدام به توسعه ربیت ام کیو نمود که در سال 2010 توسط شرکت SpringSource که بخشی از VMware است خریداری شد. 

کد منبع تحت پروانه پروانه همگانی موزیلا منتشر شد. پروژه شامل موارد زیر می‌شود:

* سرور تبادل (انگلیسی: RabbitMQ) ربیت ام کیو
* دروازه‌های ارتباطی (انگلیسی: gateway) برای پروتکل‌های AMQP، HTTP، STOMP و MQTT
* کتابخانه‌های سمت کلاینت AMQP برای جاوا، .NET Framework و Erlang. (کلاینت‌های AMQP برای سایر زبان‌ها هم توسط سایر فروشندگان در دسترس است)
* یک پلتفرم افزونه پذیر (انگلیسی: plug-in platform) برای اضافه کردن موارد سفارشی شده که شامل مجمموعه افزونه‌های از پیش تعریف شده زیر است:
	+ افزونه Shovel که مسئول انتقال یا کپی کردن پیام‌ها از یک کارگزار به کارگزار دیگر است.
	+ افزونه Federation که امکان به اشتراک گذاری بهینه پیام‌ها بین کارگزاران (در سطح تبادل) را فراهم می‌کند.
	+ افزونه Management که پایش و کنترل کارگزارها و خوشه‌هایی از کارگزاران را ممکن می‌کند.

مثال ها
-------

این بخش شامل مثال‌هایی برای ارسال/ دریافت و ارسال پیام‌ها به/از یک صف به زبان پایتون است:

### ارسال

قطعه کد زیر ابتدا ارتباط برقرار کرده، از وجود صف اطمینان حاصل می  کند، پیام را می فرستد و در نهایت ارتباط را قطع می‌کند.

```
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue\_declare(queue='hello')
channel.basic\_publish(exchange='', routing\_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

```

### دریافت

به‌طور مشابه، برنامه زیر یک پیام را از صف دریافت کرده و در خروجی چاپ می‌کند:

```
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue\_declare(queue='hello')
print(' [\*] Waiting for messages. To exit press CTRL+C')
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
channel.basic\_consume(callback, queue='hello', no\_ack=True)
channel.start\_consuming()

```

منابع
-----

1. ↑  «Which protocols does RabbitMQ support?». بایگانی‌شده از اصلی در ۱۵ مه ۲۰۱۸. دریافت‌شده در ۱۸ مه ۲۰۱۸.
2. ↑  "Rabbit Technologies announce acquisition by SpringSource". *Press release*. April 13, 2010. Archived from the original on April 18, 2010. Retrieved October 3, 2013.
3. ↑  "Proudly part of Pivotal". *Press release*. May 14, 2010. Archived from the original on June 2, 2013. Retrieved October 3, 2013.

مطالعه بیشتر
------------

* Joern Barthel (2009-09-13). "Getting started with AMQP and RabbitMQ". InfoQ.
* Peter Cooper (2009-04-09). "RabbitMQ - A Fast, Reliable Queuing Option for Rubyists". RubyInside.

پیوند به بیرون
--------------

* وبگاه رسمی
* بررسی زندگی دوم توسط آزمایشگاه لیندن
* استفاده از RabbitMQ، Spring AMQP و Spring Integration
* آموزش RabbitMQ
* معرفی RabitMQ
* cloudamqp.com: rabbitMQ به عنوان یک سرویس
* amqpHosting.com: ابر میزبانی RabbitMQ به عنوان یک سرویس
* compose.com: میزبانی RabbitMQ