Sobes.tech
Middle

RabbitMQ nima?

sobes.tech AI

AIdan javob

RabbitMQ - bu xabar almashinuvi bo'lib, u AMQP (Advanced Message Queuing Protocol) protokolini amalga oshiradi. U ilovalarga asinxron tarzda o'zaro ta'sir qilish imkonini beradi, xabarlarni markazlashtirilgan tizim orqali yuborish va olish imkonini yaratadi. RabbitMQ ishonchli yetkazib berish, marshrutizatsiya va xabarlarni saqlashni ta'minlaydi.

Asosiy komponentlar:

  • Proizvodchi (Producer): Xabarlarni RabbitMQ ga yuboradi.
  • Almashuvchi (Exchange): Xabarlarni ishlab chiqaruvchilardan oladi va marshrutlash qoidalariga (binding) asoslangan holda bir yoki bir nechta navbatlarga yo'naltiradi.
  • Navbat (Queue): Xabarlarni qabul qilgunga qadar saqlaydi.
  • Foydalanuvchi (Consumer): Navbatlardan xabarlarni oladi va ishlov beradi.

Almashuv turlari:

  • Direct: Xabarlarni, marshrutlash kaliti aniq navbatning bog'lanish kalitiga mos keladigan holda yo'naltiradi.
  • Fanout: Xabarlarni barcha bog'langan navbatlarga yo'naltiradi, marshrutlash kalitini hisobga olmay.
  • Topic: Xabarlarni marshrutlash kalitining qisman mos kelishiga asoslangan holda, navbat bog'lanish shabloniga (yulduz * va #) asoslangan holda yo'naltiradi.
  • Headers: Xabarlarni, marshrutlash kalitiga emas, balki xabar sarlavhalariga asoslangan holda yo'naltiradi.

PHP dasturlashda qo'llanilishi:

  • Vazifalarni kechiktirilgan ishlash: Masalan, email yuborish, hisobotlar tayyorlash, rasmni qayta ishlash.
  • Mikroservis arxitekturasi: Xizmatlar o'rtasida asinxron o'zaro ta'sir.
  • Haqiqiy vaqt tizimlari: Katta voqealar oqimini ishlash.
  • Yukni balanslash: Vazifalarni bir nechta ishchilarga taqsimlash.

php-amqplib kutubxonasi yordamida xabar yuborish misoli:

<?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] Yuborildi '" . $data . "'\n";

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

Xabarni qabul qilish misoli:

<?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 " [*] Xabar kutilyapti. Chiqish uchun CTRL+C ni bosing\n";

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

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

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

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

RabbitMQ nosozliklarga chidamli, kengaytiriladigan va tarqatilgan tizimlarni loyihalashda moslashuvchanlikni ta'minlaydi.