![]() | |
توسعهدهنده(ها) | Pivotal Software |
---|---|
انتشار پایدار | 3.7.4
/ ۸ مارس ۲۰۱۸ |
مخزن | github |
نوشتهشده با | ارلنگ |
سیستمعامل | چند سکویی |
نوع | پرتکل صف بندی پیام پیشرفته, میان افزار پیام محور |
مجوز | پروانه همگانی موزیلا |
وبگاه |
ربیت ام کیو (انگلیسی: 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 است خریداری شد.[۲] [۳]
کد منبع تحت پروانه پروانه همگانی موزیلا منتشر شد. پروژه شامل موارد زیر میشود:
این بخش شامل مثالهایی برای ارسال/ دریافت و ارسال پیامها به/از یک صف به زبان پایتون است:
قطعه کد زیر ابتدا ارتباط برقرار کرده، از وجود صف اطمینان حاصل می کند، پیام را می فرستد و در نهایت ارتباط را قطع میکند.
#!/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()