1. পূর্ব-টিউটোরিয়াল

দয়া করে প্রথমে নিম্নলিখিত বিষয়গুলি পড়ুন যাতে সংশ্লিষ্ট ধারণা প্রাপ্ত করা যায়

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), তাই বার্তা পেতে পারা।