Mode antrian paling sederhana dari PHP RabbitMQ terdiri dari produsen dan konsumen, seperti yang ditunjukkan dalam arsitektur di bawah ini.
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