ربیت‌ ام‌ کیو (RabbitMQ) ابزاری بهینه برای پیام‌رسانی و جابه‌جایی داده‌ها میان اعضای تیم است که با استفاده از پروتکل‌هایش این روند را روان‌تر و آسان‌تر می‌کند. برای استفاده از آن می‌توانید از سرور ابری، سرور اختصاصی یا ترکیبی استفاده کنید. در واقع این برنامه انعطاف‌پذیر بوده و می‌تواند بر اساس نیازهای شما تنظیم شود.

ربیت‌ام‌کیو چیست؟

ربیت‌ ام‌ کیو یک نرم‌افزار رایگان برای پیام‌رسانی است که می‌تواند با برنامه‌های گسترده‌ای هماهنگ می‌شود تا نیاز کاربر را به طور کامل برآورده کند.

همچنین این برنامه از پروتکل AMQP برای مدیریت پیام‌رسانی و درخواست‌ها استفاده می‌کند که عملکرد آن را بهتر می‌کند.

ربیت‌ام‌کیو

چرا RabbitMQ ؟

قابلیت ادغام

این نرم‌افزار با استفاده از پروتکل‌های مختلف، به‌راحتی با هر سیستمی ادغام می‌شود. امکان برنامه‌نویسی به زبان دلخواه نیز به کاربر اجازه می‌دهد تا از تمام ویژگی‌های آن استفاده کرده و با نیازهای خود تطبیق دهند.

انعطاف‌پذیری

باتوجه‌به انعطاف‌پذیری ربیت‌ ام‌ کیو، امکان سفارشی‌سازی سیستم پیام‌رسانی برای کاربر وجود دارد.

قابل‌اطمینان بودن

این نرم‌افزار برای گذراندن مراحل مختلف درخواست تأییدیه دارد و به این صورت امنیت و قابلیت اطمینان را تضمین می‌کند. همچنین این کار باعث کاهش درصد خطا می‌شود.

راهنمای جامع برنامه‌نویسی در این نرم‌افزار

Ruby

مراحل تنظیم محیط کار

نصب کتابخانۀ Bunny

gem install bunny

ایجاد نمونه ربیت‌ ام‌ کیو برای آزمایش

انتشار پیام در RabbitMQ

require “rubygems” require “bunny” require “json” conn = Bunny.new ENV[‘CLOUDAMQP_URL’] conn.start ch = conn.create_channel q = ch.queue(“examplequeue”, :durable => true) x = ch.direct(“example.exchange”, :durable => true) q.bind(x, :routing_key => “process”) information_message = “{\”email\”: \”example@mail.com\”,\”name\”: \”name\”,\”size\”: \”size\”}” x.publish(information_message, :timestamp => Time.now.to_i, :routing_key => “process”) sleep 1.0 conn.close

راهنمای قدم‌به‌قدم انتشار در نرم‌افزار

برای ایجاد خط اتصال با ربیت‌ ام‌ کیو به کمک کتابخانۀ Bunny، ENV[‘CLOUDAMQP_URL’]

را به‌جای CloudAMQP URL اصلی جایگزین کنید.

یک کانال مجازی بسازید.

درخواست را ارسال کنید.

درخواستتان را با یک Exchange هماهنگ کنید.

پیامی را انتشار دهید.

خط اتصال را قطع کنید.

تنظیمات برای مصرف کننده

require “rubygems” require “bunny” require “json” conn = Bunny.new ENV[‘CLOUDAMQP_URL’] conn.start ch = conn.create_channel q = ch.queue(“examplequeue”, :durable => true) def pdf_processing(json_information_message) puts “Handling pdf processing for #{json_information_message[’email’]}” sleep 5.0 puts “pdf processing done” end q.subscribe(:block => true) do |delivery_info, properties, payload| json_information_message = JSON.parse(payload) pdf_processing(json_information_message) end

راهنمای استفاده از پیام‌رسان

  • یک خط ارتباطی و کانال ایجاد کنید.
  • نام درخواستی که از قبل انتشار داده شده را وارد کنید.
  • برای پردازش از PDF کمک بگیرید.
  • از مصرف‌کننده بخواهید تا در سیستم اشتراک بگیرد. برای بررسی پیام‌ها از q.subscribe استفاده کنید.

Node.js

تنظیم محیط کار

Amqplib را نصب کنید.

npm install amqplib

ایجاد خط اتصال

var amqp = require(‘amqplib/callback_api’); var amqpConn = null; function start() { amqp.connect(process.env.CLOUDAMQP_URL + “?heartbeat=60”, function(err, conn) { if (err) { console.error(“[AMQP]”, err.message); return setTimeout(start, 1000); } conn.on(“error”, function(err) { if (err.message !== “Connection closing”) { console.error(“[AMQP] conn error”, err.message); } }); conn.on(“close”, function() { console.error(“[AMQP] reconnecting”); return setTimeout(start, 1000); }); console.log(“[AMQP] connected”); amqpConn = conn; whenConnected(); }); }

تنظیمات برای انتشار

var pubChannel = null; var offlinePubQueue = []; function startPublisher() { amqpConn.createConfirmChannel(function(err, ch) { if (err) return console.error(“[AMQP] channel error”, err.message); ch.on(“close”, function() { console.log(“[AMQP] channel closed”); }); pubChannel = ch; while (offlinePubQueue.length) { var [exchange, routingKey, content] = offlinePubQueue.shift(); publish(exchange, routingKey, content); } }); } function publish(exchange, routingKey, content) { try { pubChannel.publish(exchange, routingKey, new Buffer(content), { persistent: true }, function(err, ok) { if (err) { console.error(“[AMQP] publish”, err); offlinePubQueue.push([exchange, routingKey, content]); pubChannel.connection.close(); } }); } catch (e) { console.error(“[AMQP] publish”, e.message); offlinePubQueue.push([exchange, routingKey, content]); } }

تنظیمات برای مصرف‌کننده

function startWorker() { amqpConn.createChannel(function(err, ch) { if (err) return console.error(“[AMQP] channel error”, err.message); ch.prefetch(10); ch.assertQueue(“jobs”, { durable: true }, function(err, _ok) { if (err) return console.error(“[AMQP] assertQueue”, err.message); ch.consume(“jobs”, processMsg, { noAck: false }); console.log(“Worker is started”); }); }); } function processMsg(msg) { work(msg, function(ok) { if (ok) ch.ack(msg); else ch.reject(msg, true); }); } function work(msg, cb) { console.log(“PDF processing of “, msg.content.toString()); cb(true); }

شروع کار

setInterval(function() {

publish(“”, “jobs”, new Buffer(“work work work”));

}, 1000);

start();

Python

پیش‌نیاز

  • Python3 را نصب کنید.
  • نمونه‌ای از RabbitMQ را بری روند آزمایش ایجاد کنید.

نصب Pika

  • Pika را به  requirements.txt اضافه کنید. برای مشخص‌کردن ورژن موردنظر، pika==1.1.0 را در فایل اصلی وارد کنید.
  • Pika را نصب کنید.

تنظیمات انتشار

import pika, os, logging logging.basicConfig() url = os.environ.get(‘CLOUDAMQP_URL’, ‘amqp://guest:guest@localhost/%2f’) params = pika.URLParameters(url) params.socket_timeout = 5 connection = pika.BlockingConnection(params) channel = connection.channel() channel.queue_declare(queue=’pdfprocess’) channel.basic_publish(exchange=”, routing_key=’pdfprocess’, body=’User information’) print(“[x] Message sent to consumer”) connection.close()

 

تنظیمات مصرف‌‌کننده

import pika, os, time def pdf_process_function(msg): print(“PDF processing”) print(“[x] Received ” + str(msg)) time.sleep(5) print(“PDF processing finished”) url = os.environ.get(‘CLOUDAMQP_URL’, ‘amqp://guest:guest@localhost:5672/%2f’) params = pika.URLParameters(url) connection = pika.BlockingConnection(params) channel = connection.channel() channel.queue_declare(queue=’pdfprocess’) def callback(ch, method, properties, body): pdf_process_function(body) channel.basic_consume(queue=’pdfprocess’, on_message_callback=callback, auto_ack=True) channel.start_consuming() connection.close()

رابط کاربری بخش مدیریتی

رابط کاربری RabbitMQ ساده و کاربردی‌ست و از طریق مرورگر وب به شما امکان نظارت کامل از جمله مدیریت پیام‌ها و کاربران را می‌دهد.

ویژگی‌های اصلی

امکان مدیریت کامل بخش Queue

امکان مدیریت خطوط اتصال و کانال‌ها که برای ارتباط با سرور RabbitMQ ضروری است.

قابلیت مدیریت Exchange

امکان بررسی جامع سیستم پیام‌رسانی

قابلیت پیام‌رسانی دستی

برای دسترسی به بخش مدیریتی در هاست شخصی، در مرورگر خود http://localhost:15672/ را وارد کنید.

رابط کاربری بخش میدیریتی

نسخه‌ها برنامه

نسخۀ رایگان و اپن‌سورس

این نسخه تحت مجوز Apache 2.0 و Mozilla Public 2.0 است که به‌صورت رایگان می‌توانید آن را تهیه کنید.

نسخۀ تجاری

این نسخه قابلیت‌هایی اضافه نسب به نسخۀ رایگان دارد که می‌توانید لیست آن‌ها را به‌صورت کامل در منابع Broadcom مشاهده کنید.

موارد استفاده از سرور ربیت‌ام‌کیو

  • با استفاده از این نرم‌افزار فعالیت‌های طولانی‌مدت را مدیریت کرده و فایل‌ها را پردازش کنید.
  • برای تنظیم میکروسرویس‌ها، ربیت‌ ام‌ کیو می‌توانید به عنوان راه‌حلی مناسب عمل کرده و ارتباط بین برنامه‌ها را مدیریت می‌کند.
  • این نرم‌افزار همچنین برای مدیریت بخش‌ Queue امکاناتی فراهم می‌کند که می‌تواند برای کاربر مفید باشد.

مزایای استفاده از RabbitMQ

  • ماندگاری و مقیاس‌پذیری سیستم پیام‌رسانی
  • بهینه‌سازی مصرف
  •  عملکرد قدرتمند
  • امکان هماهنگ‌سازی با زبان‌های مختلف برنامه‌نویسی بر اساس نیاز کاربر
  • امکانات مختلف پیکربندی

سخن پایانی

به طور خلاصه، RabbitMQ نرم‌افزاری اپن‌سورس است که می‌تواند روند انتقال داده‌ها به شما کمک کند. در واقع این نرم‌افزار کار را برای شما آسان می‌کند.