Middle
RabbitMQ эмне?
sobes.tech AI
AIден жооп
RabbitMQ — бул билдирүү брокери, ал AMQP (Advanced Message Queuing Protocol) протоколун ишке ашырат. Ал колдонмолорго асинхрондуу өз ара аракеттенүүгө мүмкүндүк берет, билдирүүлөрдү борборлоштурулган систем аркылуу жөнөтүү жана алуу аркылуу. RabbitMQ ишенимдүү жеткирүү, маршруттоо жана билдирүүлөрдү сактоо камсыздайт.
Негизги компоненттер:
- Өндүрүүчү (Producer): RabbitMQга билдирүүлөрдү жөнөтөт.
- Алмаштыргыч (Exchange): Өндүрүүчүлөрдөн билдирүүлөрдү кабыл алып, маршруттоо эрежелери боюнча бир же бир нече кезекке жөнөтөт.
- Кезек (Queue): Билдирүүлөрдү сактайт, аларды колдонуучулар алгандан кийин чейин.
- Колдонуучу (Consumer): Кезектерден билдирүүлөрдү алып, иштетет.
Алмаштыргыч түрлөрү:
- Direct: Билдирүүлөрдү так маршруттоо ачкычы менен так байланышкан кезекке жөнөтөт.
- Fanout: Билдирүүлөрдү бардык байланышкан кезектерге жөнөтөт, маршруттоо ачкычын эске албастан.
- Topic: Билдирүүлөрдү маршруттоо ачкычынын бөлүктүү дал келүүсү боюнча жөнөтөт,
*жана#символдорун колдонуу менен. - Headers: Билдирүүлөрдү алардын башталышынын негизинде маршруттоо, маршруттоо ачкычынын ордуна.
PHP колдонмолору:
- Иштерди кечиктирүүчү иштетүү: мисалы, электрондук почта жөнөтүү, отчетторду түзүү, сүрөттөрдү иштетүү.
- Микросервис архитектурасы: кызматтардын ортосунда асинхрондуу өз ара аракеттенүү.
- Чын убакыт системелери: чоң окуя агымын иштетүү.
- Жүктү теңдөө: ишти бир нече иштегендерге бөлүү.
php-amqplib китепканасы аркылуу билдирүү жөнөтүүнүн мисалы:
<?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] Жөнөтүлдү '" . $data . "'\n";
$channel->close();
$connection->close();
Билдирүү алуу мисалы:
<?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 " [*] Билдирүүлөр күтүлүүдө. Чыгуу үчүн CTRL+C басыңыз\n";
$callback = function ($msg) {
echo " [x] Алынды '" . $msg->body . "'\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
RabbitMQ каталарга туруктуу, масштабдуу жана чынжыр системдерин долбоорлоодо ийкемдүү камсыздайт.