ربیت ام کیو

ربیت ام کیو  (انگلیسی: 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()

منابع

مطالعه بیشتر

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