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.