حالت سادهترین صف PHP RabbitMQ از یک تولیدکننده و یک مصرفکننده تشکیل شده است، همانطور که در ساختار زیر نشان داده شده است.
توضیح:
P نمایانگر تولیدکننده، C نمایانگر مصرفکننده و قرمز نمایانگر صف است.
در حال حاضر، وقتی با PHP RabbitMQ عمل میکنیم، بسته پیشنهادی توسط سایت رسمی php-amqplib است.
1. پیشآموزش
لطفا ابتدا بخشهای زیر را مطالعه کنید تا دانش مربوطه را متوجه شوید:
2. نصب وابستگیهای PHP
استفاده از composer برای نصب:
composer require php-amqplib/php-amqplib
توجه: آخرین نسخه php-amqplib نیازمند PHP 7.0 یا بالاتر است.
واردکردن بسته php-amqplib:
require_once __DIR__ . '/vendor/autoload.php';
3. ارسال پیام
3.1. ایجاد اتصال RabbitMQ
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
توضیح پارامترها:
- new AMQPStreamConnection('آدرس سرور RabbitMQ', شماره پورت, 'نام کاربری', 'رمز عبور');
3.2. ایجاد کانال
$channel = $connection->channel();
بیشتر عملیات در کانال انجام میشود.
3.3. اعلام صف
$channel->queue_declare(
'tizi365_hello', // نام صف، باید یکتا باشد
false,
true, // آیا دوامدار است؟
false,
false
);
3.4. ارسال پیام
// تعریف یک شیء پیام، پارامتر آن محتوای پیامی است که میخواهیم ارسال کنیم
$msg = new AMQPMessage('Hello World!');
// آیا پیام دوامدار است؟
// $msg->set('delivery_mode', AMQPMessage::DELIVERY_MODE_PERSISTENT);
// ارسال پیام
$channel->basic_publish(
$msg, // شیء پیام
'', // انصراف از تبادل
'tizi365_hello' // پارامتر مسیریابی، اینجا نام صف را به عنوان پارامتر مسیریابی استفاده میکنیم
);
3.5. تکمیل کد ارسال پیام PHP
<?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->queue_declare('tizi365_hello', false, false, false, false);
// تعریف شیء پیام
$msg = new AMQPMessage('Hello World!');
// ارسال پیام
$channel->basic_publish($msg, '', 'tizi365_hello');
echo " [x] Sent 'Hello World!'\n";
$channel->close();
$connection->close();
ذخیره در فایل: send.php
۴. مصرف پیامها
سه مرحلهی اول مصرف پیامها (ایجاد ارتباط RabbitMQ، ایجاد یک کانال، اعلام یک صف) همانند ارسال پیامها است، که بهترتیب متناظر با بخشهای ۳.۱، ۳.۲ و ۳.۳ است.
کد کامل مصرف کننده به شرح زیر است:
<?php require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
// ایجاد ارتباط RabbitMQ
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// ایجاد یک کانال
$channel = $connection->channel();
// اعلام یک صف
$channel->queue_declare('tizi365_hello', false, false, false, false);
echo " [*] در حال انتظار برای پیامها. برای خروج کلید CTRL+C را فشار دهید\n";
// تعریف تابع کنترل پیام (اینجا از یک تابع ناشناس استفاده شده)
$callback = function ($msg) {
// منطق کنترل پیام
echo ' [x] دریافت شد ', $msg->body, "\n";
};
// ایجاد یک مصرفکننده
$channel->basic_consume(
'tizi365_hello', // نام صف برای مصرف
'', // برچسب مصرفکننده، اگر نادیده گرفته شود، یک شناسه یکتا ایجاد میشود
false,
true, // آیا بهطور خودکار پیام را تأیید کند، یعنی بهطور خودکار به RabbitMQ اعلام میکند که پیام با موفقیت پردازش شده است
false,
false,
$callback // تابع کنترل پیام
);
// اگر کانال بسته نشده باشد، فرایند را مسدود نگه دارید تا از خروج جلوگیری شود
while ($channel->is_open()) {
$channel->wait();
}
// گشایش منابع
$channel->close();
$connection->close();
ذخیره در فایل: recv.php
۵. اجرای دمو
دو پنجره ترمینال باز کنید و دو اسکریپت را به طور جداگانه اجرا کنید:
php recv.php
php send.php