Sobes.tech
Middle

RabbitMQ nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

RabbitMQ, AMQP (Gelişmiş Mesaj Sıralama Protokolü) protokolünü uygulayan bir mesaj aracısıdır. Uygulamaların asenkron olarak etkileşim kurmasını sağlar; mesajları merkezi bir sistem aracılığıyla gönderip alır. RabbitMQ, güvenilir teslimat, yönlendirme ve mesaj depolama sağlar.

Ana bileşenler:

  • Üretici (Producer): Mesajları RabbitMQ'ya gönderir.
  • Değişim (Exchange): Üreticilerden mesaj alır ve yönlendirme kurallarına (binding) göre bir veya daha fazla kuyruğa yönlendirir.
  • Kuyruk (Queue): Mesajları, tüketiciler tarafından alınana kadar depolar.
  • Tüketici (Consumer): Kuyruklardan mesaj alır ve işler.

Değişim türleri:

  • Direct: Mesajları, yönlendirme anahtarı tam olarak kuyruk bağlama anahtarıyla eşleşen kuyruklara yönlendirir.
  • Fanout: Mesajları, yönlendirme anahtarını dikkate almadan tüm bağlı kuyruklara yönlendirir.
  • Topic: Mesajları, yönlendirme anahtarının kısmi eşleşmesine göre, kuyruk bağlama desenine (yıldız * ve kare # kullanılarak) göre yönlendirir.
  • Headers: Mesajların başlıklarına göre yönlendirir, yönlendirme anahtarına değil.

PHP geliştirmede kullanım:

  • Gecikmiş görev işleme: Örneğin, e-posta gönderimi, rapor oluşturma, görüntü işleme.
  • Mikroservis mimarisi: Servisler arasında asenkron etkileşim.
  • Gerçek zamanlı sistemler: Büyük olay akışlarının işlenmesi.
  • Yük dengeleme: Görevleri birden fazla işçiye dağıtma.

php-amqplib kütüphanesi kullanılarak mesaj gönderme örneği:

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

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

Mesaj alma örneği:

<?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 bekleniyor. Çıkmak için CTRL+C\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, arızalara dayanıklılık, ölçeklenebilirlik ve dağıtık sistemlerin tasarımında esneklik sağlar.