1. পূর্ব-টিউটোরিয়াল
দয়া করে প্রথমে নিম্নলিখিত বিষয়গুলি পড়ুন যাতে সংশ্লিষ্ট ধারণা প্রাপ্ত করা যায়
- RabbitMQ মৌলিক ধারণা
- RabbitMQ Topic প্যাটার্নের সিদ্ধান্ত
- PHP RabbitMQ দ্রুত শুরু অধ্যায় (প্রয়োজন, কারণ পরবর্তী অধ্যায়গুলি কোডটি আবার দাখিল করবে না, কেবল গুরুত্বপূর্ণ কোডটি দেখাবে)
- PHP RabbitMQ পাবলিশ/সাবস্ক্রাইব প্যাটার্ন অধ্যায় (প্রয়োজন, কারণ কোডটি প্রায় একই, কেবল এক্সচেঞ্জ ধরণ এবং রাউটিং প্যারামিটার পরিবর্তন করা হয়)
2. টপিক এক্সচেঞ্জ সংজ্ঞায়িত করুন
// Exchange ঘোষণা করুন
$channel->exchange_declare(
'tizi365.topic', // Exchange এর নাম, ইউনিক হতে হবে, পুনরাবৃত্তি হতে পারে না
'topic', // Exchange ধরন
মন্দিবিহীন,
মন্দিবিহীন, // কোন এটি ট্রেজারেবল কিনা
মন্দিবিহীন
);
লেবেল: মেসেজ প্রডিউসার এবং কনসিউমার উভয়ই এক্সচেঞ্জ প্রয়োজন তাদের
3. মেসেজ প্রেরণ
আমরা এক্সচেঞ্জে মেসেজ প্রেরণ করি, এবং রোটিং নিয়মনীতি অনুযায়ী এক্সচেঞ্জ মেসেজ গুলি সংশ্লিষ্ট কিউতে পৌঁছে দেয়।
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// একটি rabbitmq সংযোগ তৈরি করুন
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// চ্যানেল তৈরি করুন
$channel = $connection->channel();
// Exchange সংজ্ঞায়িত করুন
$channel->exchange_declare(
'tizi365.topic', // Exchange এর নাম, ইউনিক হতে হবে, পুনরাবৃত্তি হতে পারে না
'topic', // Exchange ধরন
মন্দিবিহীন,
মন্দিবিহীন, // কোন এটি ট্রেজারেবল কিনা
মন্দ
### 4.1. কিউ এবং এক্সচেঞ্জ সংজ্ঞা
কিউ মেসেজ কনসিউম করার জন্য, আপনাকে প্রথমে একটি কিউ সংজ্ঞানা করতে হবে, এবং তারপর কিউকে লক্ষ্যমুখী এক্সচেঞ্জে বাইন্ড করতে হবে।
// একটি অজানা কিউ ঘোষণা করুন list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);
// কিউকে নির্দিষ্ট এক্সচেঞ্জে বাইন্ড করুন $channel->queue_bind( $queue_name, // কিউ নাম 'tizi365.topic', // এক্সচেঞ্জ নাম ".tizi365.com" // বাইন্ডিং রাউটিং প্যারামিটার, এখানে একটি অস্ত্রের () ব্যবহার করা হচ্ছে, যা একটি একক শব্দ ম্যাচ করতে পারে
> লক্ষ্য: সেট করার সমস্ত রাউটিং প্যারামিটারগুলি একই (*) অস্ত্রের ব্যবহার করে, যা একটি একক শব্দের সাথে ম্যাচ করতে পারে। যদি পরিবর্তন করা হয় # (হ্যাশ) -এ, তবে এটি একাধিক শব্দের সাথে ম্যাচ করতে পারে।
```php
<?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), তাই বার্তা পেতে পারা।