PHP RabbitMQ'ın en basit kuyruk modu, aşağıdaki mimaride gösterildiği gibi bir üretici ve bir tüketiciden oluşur.
Açıklama:
P üreticiyi, C tüketiciyi ve kırmızı renk ise kuyruğu temsil eder.
Şu anda PHP ile RabbitMQ işletilirken, resmi önerilen paket php-amqplib'dir.
1. Öğretici Öncesi
Lütfen ilgili bilgileri anlamak için öncelikle aşağıdaki bölümleri okuyun:
2. PHP Bağımlılıklarının Kurulması
Composer kullanarak kurulum yapın:
composer require php-amqplib/php-amqplib
Not: En son php-amqplib sürümü PHP 7.0 veya üstünü gerektirir.
php-amqplib paketini içe aktarın:
require_once __DIR__ . '/vendor/autoload.php';
3. Mesaj Gönderme
3.1. RabbitMQ bağlantısı oluşturma
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
Parametre açıklaması:
- new AMQPStreamConnection('RabbitMQ sunucu adresi', port numarası, 'kullanıcı adı', 'şifre');
3.2. Kanal oluşturma
$channel = $connection->channel();
Çoğu işlem kanal üzerinde tamamlanır.
3.3. Kuyruğu tanımlama
$channel->queue_declare(
'tizi365_hello', // Kuyruk adı, benzersiz olmalı
false,
true, // Kalıcı olup olmadığı
false,
false
);
3.4. Mesaj gönderme
// Bir mesaj nesnesi tanımlayın, parametre mesaj içeriğimizi göndermek için
$msg = new AMQPMessage('Merhaba Dünya!');
// Mesajın kalıcı olup olmadığı
// $msg->set('delivery_mode', AMQPMessage::DELIVERY_MODE_PERSISTENT);
// Mesaj gönderme
$channel->basic_publish(
$msg, // Mesaj nesnesi
'', // Değiş tokuşu yok say
'tizi365_hello' // Yol yönlendirme parametresi, burada kuyruk adını yol yönlendirme parametresi olarak kullanın
);
3.5. PHP mesaj gönderme kodunu tamamlama
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// Bağlantı oluşturma
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// Kanal oluşturma
$channel = $connection->channel();
// Kuyruğu tanımlama
$channel->queue_declare('tizi365_hello', false, false, false, false);
// Mesaj nesnesi tanımlama
$msg = new AMQPMessage('Merhaba Dünya!');
// Mesaj gönderme
$channel->basic_publish($msg, '', 'tizi365_hello');
echo " [x] Sent 'Hello World!'\n";
$channel->close();
$connection->close();
Dosyaya kaydet: send.php
4. Mesajları Tüketme
Mesaj tüketiminin ilk üç adımı (RabbitMQ bağlantısı oluşturma, bir kanal oluşturma, bir kuyruk bildirme) mesaj göndermeyle aynıdır; sırasıyla 3.1, 3.2 ve 3.3 bölümlere karşılık gelir.
Tam tüketici kodu aşağıdaki gibidir:
<?php require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
// RabbitMQ bağlantısı oluşturma
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// Bir kanal oluşturma
$channel = $connection->channel();
// Bir kuyruk bildirme
$channel->queue_declare('tizi365_hello', false, false, false, false);
echo " [*] Mesajlar bekleniyor. Çıkmak için CTRL+C tuşlarına basın\n";
// Mesaj işleme işlevini tanımlama (burada anonim bir işlev kullanılıyor)
$callback = function ($msg) {
// Mesaj işleme mantığı
echo ' [x] Alındı: ', $msg->body, "\n";
};
// Bir tüketici oluşturma
$channel->basic_consume(
'tizi365_hello', // Tüketilecek kuyruk adı
'', // Tüketici etiketi, ihmal edilirse benzersiz bir kimlik oluşturulur
false,
true, // Mesajı otomatik olarak doğrulama, yani RabbitMQ'ya mesajın başarıyla işlendiğini otomatik olarak bildirme
false,
false,
$callback // Mesaj işleme işlevi
);
// Kanal kapatılmadığı sürece işlemi bloke etmek ve çıkışı önlemek için süreci bekletme
while ($channel->is_open()) {
$channel->wait();
}
// Kaynakları serbest bırakma
$channel->close();
$connection->close();
Dosyaya kaydet: recv.php
5. Demo'yu Çalıştırma
İki adet kabuk penceresi açın ve iki komut dosyasını ayrı ayrı çalıştırın:
php recv.php
php send.php