Mode antrian paling sederhana dari PHP RabbitMQ terdiri dari produsen dan konsumen, seperti yang ditunjukkan dalam arsitektur di bawah ini. PHP RabbitMQ Penjelasan: P mewakili produsen, C mewakili konsumen, dan warna merah mewakili antrian.

Saat ini, ketika mengoperasikan RabbitMQ dengan PHP, paket yang direkomendasikan oleh resmi adalah php-amqplib.

1. Pra-tutorial

Harap baca bagian berikut terlebih dahulu untuk memahami pengetahuan terkait:

2. Pasang Dependensi PHP

Gunakan composer untuk memasang:

composer require php-amqplib/php-amqplib

Catatan: Versi terbaru php-amqplib memerlukan PHP 7.0 atau lebih.

Impor paket php-amqplib:

require_once __DIR__ . '/vendor/autoload.php';

3. Mengirim pesan

3.1. Membuat koneksi RabbitMQ

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');

Penjelasan parameter:

  • new AMQPStreamConnection('alamat server RabbitMQ', nomor port, 'nama pengguna', 'kata sandi');

3.2. Membuat Saluran (Channel)

$channel = $connection->channel();

Sebagian besar operasi diselesaikan di saluran.

3.3. Mendeklarasikan antrian

$channel->queue_declare(
	'tizi365_hello',  // Nama antrian, harus unik
	false,
	true, // Apakah itu tahan lama
	false,
	false
);

3.4. Mendorong pesan

// Mendefinisikan objek pesan, parameter adalah konten pesan yang perlu kita kirim
$msg = new AMQPMessage('Halo Dunia!');
// Apakah pesan itu tahan lama
// $msg->set('delivery_mode', AMQPMessage::DELIVERY_MODE_PERSISTENT);

// Kirim pesan
$channel->basic_publish(
		$msg, // Objek pesan
		'',   // Abaikan pertukaran
		'tizi365_hello' // Parameter routing, gunakan nama antrian sebagai parameter routing di sini
	);

3.5. Menyelesaikan kode pengiriman pesan PHP

<?php 
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

// Membuat koneksi
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// Membuat saluran
$channel = $connection->channel();
// Mendeklarasikan antrian
$channel->queue_declare('tizi365_hello', false, false, false, false);

// Mendefinisikan objek pesan
$msg = new AMQPMessage('Halo Dunia!');
// Mengirim pesan
$channel->basic_publish($msg, '', 'tizi365_hello');

echo " [x] Mengirim 'Halo Dunia!'\n";

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

Simpan ke file: send.php

4. Mengonsumsi Pesan

Tiga langkah pertama dalam pengonsumsian pesan (membuat koneksi RabbitMQ, membuat saluran, mendeklarasikan antrian) sama seperti mengirim pesan, sesuai dengan bagian 3.1, 3.2, dan 3.3, masing-masing.

Kode konsumen lengkap adalah sebagai berikut:

<?php require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

// Membuat koneksi RabbitMQ
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// Membuat saluran
$channel = $connection->channel();

// Mendeklarasikan sebuah antrian
$channel->queue_declare('tizi365_hello', false, false, false, false);

echo " [*] Menunggu pesan. Tekan CTRL+C untuk keluar\n";

// Membuat fungsi penanganan pesan (menggunakan fungsi anonim di sini)
$callback = function ($msg) {
    // Logika penanganan pesan
    echo ' [x] Menerima ', $msg->body, "\n";
};

// Membuat konsumen
$channel->basic_consume(
    'tizi365_hello', // Nama antrian yang akan dikonsumsi
    '', // Tag konsumen, jika diabaikan, ID unik akan dihasilkan
    false,
    true, // Apakah untuk secara otomatis mengakui pesan, yaitu memberitahukan RabbitMQ bahwa pesan telah berhasil diproses
    false,
    false,
    $callback // Fungsi penanganan pesan
);

// Jika saluran tidak ditutup, biarkan proses diblokir untuk mencegah keluar
while ($channel->is_open()) {
    $channel->wait();
}

// Membebaskan sumber daya
$channel->close();
$connection->close();

Simpan ke file: recv.php

5. Menjalankan Demo

Buka dua jendela shell dan jalankan kedua script secara terpisah:

php recv.php

php send.php