PHP RabbitMQ'ın en basit kuyruk modu, aşağıdaki mimaride gösterildiği gibi bir üretici ve bir tüketiciden oluşur. PHP RabbitMQ 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