Sobes.tech
Middle

Kas ir RabbitMQ?

sobes.tech AI

Atbilde no AI

RabbitMQ ir ziņojumu starpnieks, kas īsteno protokolu AMQP (Advanced Message Queuing Protocol). Tas ļauj lietotnēm asenhroni sadarboties, sūtot un saņemot ziņojumus caur centralizētu sistēmu. RabbitMQ nodrošina uzticamu piegādi, maršrutēšanu un ziņojumu glabāšanu.

Galvenās sastāvdaļas:

  • Ražotājs (Producer): Sūta ziņojumus uz RabbitMQ.
  • Apmaiņas punkts (Exchange): Saņem ziņojumus no ražotājiem un virza tos vienā vai vairākās rindās pēc maršrutēšanas noteikumiem.
  • Rinda (Queue): Glabā ziņojumus līdz tiem paņem patērētāji.
  • Patērētājs (Consumer): Saņem ziņojumus no rindām apstrādei.

Apmaiņas tipu veidi:

  • Direkt: Maršrutē ziņojumus rindās, kur maršrutēšanas atslēga precīzi sakrīt ar rindas piesaistes atslēgu.
  • Fanout: Maršrutē ziņojumus visās piesaistītajās rindās, ignorējot maršrutēšanas atslēgu.
  • Tēma: Maršrutē ziņojumus, pamatojoties uz daļēju atbilstību starp maršrutēšanas atslēgu un piesaistes šablonu (izmantojot simbolus * un #).
  • Galvenes: Maršrutē ziņojumus, pamatojoties uz ziņojuma galvenēm, nevis maršrutēšanas atslēgu.

Pielietojums PHP izstrādē:

  • Aizkavēta uzdevumu apstrāde: Piemēram, e-pasta sūtīšana, atskaišu ģenerēšana, attēlu apstrāde.
  • Mikropakalpojumu arhitektūra: Asinhrona sadarbība starp pakalpojumiem.
  • Reāllaika sistēmas: Liela notikumu plūsmas apstrāde.
  • Slodzes līdzsvarošana: Uzdevumu sadale starp vairākiem darba ņēmējiem.

Piemērs ziņojuma sūtīšanai ar php-amqplib bibliotēku:

<?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] Nosūtīts '" . $data . "'\n";

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

Piemērs ziņojuma saņemšanai:

<?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 " [*] Gaida ziņojumus. Iziet ar CTRL+C\n";

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

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

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

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

RabbitMQ nodrošina izturību pret kļūdām, mērogojamību un elastību izplatīto sistēmu projektēšanā.