Sobes.tech
Middle

RabbitMQ nədir?

sobes.tech Süni İntellekt

AI-dan cavab

RabbitMQ - bu mesaj brokeri olub, AMQP (Advanced Message Queuing Protocol) protokolunu həyata keçirir. O, tətbiqlərə asinxron şəkildə qarşılıqlı əlaqə qurmağa imkan verir; mesajları mərkəzləşdirilmiş sistem vasitəsilə göndərir və qəbul edir. RabbitMQ etibarlı çatdırılma, marşrutlaşdırma və mesajların saxlanmasını təmin edir.

Əsas komponentlər:

  • İstehsalçı (Producer): Mesajları RabbitMQ-ya göndərir.
  • Mübadilə (Exchange): İstehsalçılardan mesajlar alır və marşrutlaşdırma qaydalarına (binding) əsasən bir və ya bir neçə növbəyə yönəldir.
  • Növbə (Queue): Mesajları saxlayır, onların istifadəçilər tərəfindən alınmasına qədər.
  • İstifadəçi (Consumer): Növbələrdən mesajlar alır və emal edir.

Mübadilə növləri:

  • Direct: Mesajları, marşrutlaşdırma açarı tam olaraq növbənin bağlanma açarı ilə uyğun gələn növbələrə yönəldir.
  • Fanout: Mesajları bütün əlaqəli növbələrə yönəldir, marşrutlaşdırma açarını nəzərə almadan.
  • Topic: Mesajları, marşrutlaşdırma açarının qismən uyğunluğuna əsasən, növbə bağlanma şablonuna (yıldız *#) əsasən yönəldir.
  • Headers: Mesajların başlıqlarına əsasən yönəldir, marşrutlaşdırma açarına deyil.

PHP-də tətbiq nümunələri:

  • Gecikdirilmiş tapşırıq emalı: Məsələn, email göndərmə, hesabatların hazırlanması, şəkil emalı.
  • Mikroservis memarlığı: Xidmətlər arasında asinxron qarşılıqlı əlaqə.
  • Real vaxt sistemləri: Böyük hadisə axınlarının emalı.
  • Yük balanslaşdırma: Tapşırıqların bir neçə işçiyə paylanması.

php-amqplib kitabxanası ilə mesaj göndərmə nümunəsi:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->exchange_declare('my_exchange', 'direct', false, false, false);
$channel->queue_declare('my_queue', false, false, false, false);
$channel->queue_bind('my_queue', 'my_exchange', 'my_routing_key');

$data = 'Hello, RabbitMQ!';
$msg = new AMQPMessage($data);

$channel->basic_publish($msg, 'my_exchange', 'my_routing_key');

echo " [x] Göndərildi '" . $data . "'\n";

$channel->close();
$connection->close();

Mesaj qəbul etmə nümunəsi:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('my_queue', false, false, false, false);

echo " [*] Mesaj gözləyir. Çıxmaq üçün CTRL+C düyməsini basın\n";

$callback = function ($msg) {
    echo " [x] Alındı '" . $msg->body . "'\n";
};

$channel->basic_consume('my_queue', '', false, true, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

$channel->close();
$connection->close();

RabbitMQ, nasazlıqlara davamlılıq, miqyaslana bilmə və paylanmış sistemlərin dizaynında elastiklik təmin edir.