وضع الطابور الأبسط لـ PHP RabbitMQ يتكون من منتج ومستهلك، كما هو موضح في الهندسة المعمارية أدناه. 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