وضع الطابور الأبسط لـ PHP RabbitMQ يتكون من منتج ومستهلك، كما هو موضح في الهندسة المعمارية أدناه.
الشرح:
P يمثل المنتج، C يمثل المستهلك، واللون الأحمر يمثل الطابور.
حاليًا، عند تشغيل RabbitMQ باستخدام PHP، الحزمة الموصى بها من الرسمية هي 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('مرحباً بالعالم!');
// ما إذا كانت الرسالة مستمرة
// $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();
// تعريف الرسالة
$msg = new AMQPMessage('مرحباً بالعالم!');
// إرسال الرسالة
$channel->basic_publish($msg, '', 'tizi365_hello');
echo " [x] أرسل 'مرحباً بالعالم!'\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