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
*və#) ə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.