1. پیشِ معلومات
براہ کرم متعلقہ علم کو سمجھنے کے لئے پہلے مندرجہ ذیل سیکشنس پڑھیں
- رابطہMQ بنیادی تصورات
- رابطہMQ ٹاپک پیٹرن کا اصول
- PHP رابطہMQ تیز شروعات باب (ضروری ہے، کیونکہ مابقی باب میں کوڈ دہرایا نہیں جائے گا، صرف اہم کوڈ دکھایا جائے گا)
- PHP رابطہMQ پبلش/سبسکرائب پیٹرن باب (ضروری ہے، کیونکہ کوڈ تقریباً یکساں ہے، صرف ایکسچینج کی قسم اور راوٹنگ پیرامیٹر مختلف ہیں)
2.ٹاپک ایکسچینج کا تعریف
// ایکسچینج کا اعلان کریں
$channel->exchange_declare(
'tizi365.topic', // ایکسچینج کا نام، یہ منفرد ہونا چاہئے، دہری نہیں کر سکتا
'topic', // ایکسچینج کی قسم
false,
false, // کیا یہ دیرپا ہے یا نہیں
false
);
نوٹ: پیغام پیداکار اور پیغام کنندگان دونوں ایکسچینج کی ضرورت ہوتی ہے۔
3.پیغام بھیجیں
ہم پیغامات کو ایکسچینج کو بھیجتے ہیں، اور ایکسچینج راوٹنگ کے قواعد کے مطابق مخصوص قیو کو بھیجتا ہے۔
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// رابطہMQ کنکشن بنائیں
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// چینل بنائیں
$channel = $connection->channel();
// ایکسچینج کا اعلان کریں
$channel->exchange_declare(
'tizi365.topic', // ایکسچینج کا نام، یہ منفرد ہونا چاہئے، دہری نہیں کر سکتا
'topic', // ایکسچینج کی قسم
false,
false, // کیا یہ دیرپا ہے یا نہیں
false
);
// پیغام شے، پیرامیٹر پیغام کی مواد ہے
$msg = new AMQPMessage("ہیلو tizi365.com");
// پیغام بھیجیں
// دوسری پیرامیٹر پر توجہ دیں، راوٹنگ پیرامیٹر
$channel->basic_publish(
$msg, // پیغام شے
'tizi365.topic', // ایکسچینج کا نام
"www.tizi365.com" // راوٹنگ پیرامیٹر، درخواست کے مطابق منتخب کیا جاسکتا ہے
);
echo ' [x] Sent ', $msg->getBody(), "\n";
// وسائل کو آزاد کریں
$channel->close();
$connection->close();
4.پیغام پر آنے والاirical translation
ہم پیغاموں کو ایکسچینج بھیجتے ہیں، اور ایکسچینج راوٹنگ کے قواعد کے مطابق مخصوص قیو کو بھیجتا ہے۔
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// رابطہMQ کنکشن بنائیں
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// چینل بنائیں
$channel = $connection->channel();
// ایکسچینج کا اعلان کریں
$channel->exchange_declare(
'tizi365.topic', // ایکسچینج کا نام، یہ منفرد ہونا چاہئے، دہری نہیں کر سکتا
'topic', // ایکسچینج کی قسم
false,
false, // کیا یہ دیرپا ہے یا نہیں
false
);
// پیغام شے، پیرامیٹر پیغام کی مواد ہے
$msg = new AMQPMessage("ہیلو tizi365.com");
// پیغام بھیجیں
// دوسری پیرامیٹر پر توجہ دیں، راوٹنگ پیرامیٹر
$channel->basic_publish(
$msg, // پیغام شے
'tizi365.topic', // ایکسچینج کا نام
"www.tizi365.com" // راوٹنگ پیرامیٹر، درخواست کے مطابق منتخب کیا جاسکتا ہے
);
echo ' [x] Sent ', $msg->getBody(), "\n";
// وسائل کو آزاد کریں
$channel->close();
$connection->close();
4.1. قط فوری اور بائنڈ ایکسچینج تعریف کریں
قط کے پیغامات کو استعمال کرنے کے لئے، آپ کو پہلے قط کو تعریف کرنا ہوگا، اور پھر اس قط کو ہدف ایکسچینج سے بائنڈ کرنا ہوگا۔
// نامعلوم قط کا اعلان کریں
list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);
// قط کو مخصوص ایکسچینج سے بائنڈ کریں
$channel->queue_bind(
$queue_name, // قط کا نام
'tizi365.topic', // ایکسچینج کا نام
"*.tizi365.com" // بائنڈنگ روٹنگ پیرامیٹر، یہاں * (ستارہ) کا استعمال ہے، جو ایک واحد لفظ میچ کر سکتا ہے
نوٹ: تمام سیٹ روٹنگ پیرامیٹرز میں * (ستارہ) وائلڈ کارڈ کا استعمال ہے، جو ایک واحد لفظ سے میچ کر سکتا ہے۔ اگر یہ # (ہاش) میں تبدیل ہوگیا تو، وہ متعدد الفاظ کا میچ کر سکے گا۔
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
// ریبٹ ایم کیو کنکشن بنائیں
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// ایک چینل بنائیں
$channel = $connection->channel();
// ایک ایکسچینج تعریف کریں
$channel->exchange_declare(
'tizi365.topic', // ایکسچینج کا نام، یکساں اور دہرایا نہیں جا سکتا
'topic', // ایکسچینج کی قسم
false,
false, // کیا یہ دائمی ہے یا نہیں
false
);
// نامعلوم قط کا اعلان کریں
list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);
// قط کو مخصوص ایکسچینج سے بائنڈ کریں
$channel->queue_bind(
$queue_name, // قط کا نام
'tizi365.topic', // ایکسچینج کا نام
"*.tizi365.com" // بائنڈنگ روٹنگ کی، یہاں * کا استعمال ہے، جو ایک واحد لفظ سے میچ کر سکتا ہے
);
echo " [*] پیغام کا انتظار ہے۔ باہر نکلنے کے لئے CTRL+C دبائیں\n";
// میسج ہینڈلنگ فنکشن کو تعریف کریں (یہاں ناشنامہ فنکشن کا استعمال ہو رہا ہے)
$callback = function ($msg) {
// پیغام کے معالجے کا منطق
echo ' [x] ', $msg->body, "\n";
};
// ایک کنسیومر بنائیں
$channel->basic_consume(
$queue_name, // سے پیغامات کو استعمال کرنے کے لئے قط کا نام
'', // کنسیومر ٹیگ، اگر نظرانداز کیا گیا ہو تو، خود بخود ایک یکتا شناخت بنائے گا
false,
true, // کیا پیغام کو خود بخود تصدیق کرنا ہے، یعنی، خود بخود ریبٹ ایم کو بتانا کہ پیغام کامیابی سے پراسیس ہوگیا ہے
false,
false,
$callback // پیغام ہینڈلنگ فنکشن
);
// اگر چینل بند نہیں ہوا ہے تو، پروسیس کو روکنے کے لئے تمام پروسیس کو روکیں تاکہ خود بخود اخراج نہ ہوجائے
while ($channel->is_open()) {
$channel->wait();
}
// وسائل کو ریلیز کریں
$channel->close();
$connection->close();
کیونکہ ایکسچینج کو بائنڈ کرتے وقت روٹنگ پیرامیٹر *.tizi365.com ہے، یہ پیغام کے روٹنگ پیرامیٹر (www.tizi365.com) کے روٹنگ پیرامیٹر سے میچ ہوتا ہے، لہذا پیغام موصول ہو سکتا ہے۔