PHP RabbitMQ পাবলিশ/সাবস্ক্রাইব প্যাটার্ন (যা ফ্যানআউট প্যাটার্ন হিসেবেও পরিচিত)

RabbitMQ-তে ফ্যানআউট মোড হল এমন একটি প্যাটার্ন যেখানে প্রডিউসার দ্বারা প্রেরিত বার্তা বিভিন্ন কিউ-তে বিভিন্ন কনসিউমার দ্বারা প্রসেস করা হয়, যেমন নীচের আর্কিটেকচার ডায়াগ্রামে দেখানো হচ্ছে।

RabbitMQ ওয়ার্ক মোড

ফ্যানআউট ইক্সচেঞ্জ সমস্ত বোন্ড কিউ-তে বার্তা প্রেরণ করতে পারে।

লক্ষ্য করুন: RabbitMQ ওয়ার্কিং মোড ব্যবহার করা কি হোক, পার্থক্যটা বিন্যাস এবং রাউটিং প্যারামিটার ব্যবহারে আছে।

1. প্রাথমিক টিউটোরিয়াল

সম্পর্কিত জ্ঞান বুঝতে নিম্নলিখিত অধ্যায়গুলি পড়ুন:

2. ফ্যানআউট ইক্সচেঞ্জ সংজ্ঞায়িত করা

চ্যানেলের exchange_declare ফাংশনের মাধ্যমে ইক্সচেঞ্জ সংজ্ঞায়িত করুন।

$channel->exchange_declare(
    'tizi365.fanout', // ইক্সচেঞ্জ নাম, অবশ্যই অদ্বিতীয় এবং পুনরাবৃত্তি করা যাবে না
    'fanout', // ইক্সচেঞ্জ প্রকার
    false,
    false, // অবশিষ্ট করতে হবে কিনা
    false
);

লক্ষ্য করুন: বার্তা উৎপাদক এবং কনসিউমার উভয়ই ইক্সচেঞ্জ প্রয়োজন রয়েছে।

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();

// ইক্সচেঞ্জ ঘোষণা করুন
$channel->exchange_declare(
    'tizi365.fanout', // ইক্সচেঞ্জ নাম, অবশ্যই অদ্বিতীয় এবং পুনরাবৃত্তি করা যাবে না
    'fanout', // ইক্সচেঞ্জ প্রকার
    false,
    false, // অবশিষ্ট করতে হবে কিনা
    false
);
// মেসেজ অবজেক্ট, যেখানে মেসেজের বিষয় সামগ্রীটি প্যারামিটার হিসেবে
$msg = new AMQPMessage("hello tizi365.com");

$channel->basic_publish(
    $msg, // মেসেজ অবজেক্ট
    'tizi365.fanout' // ইক্সচেঞ্জ নাম
);

echo ' [x] Sent ', $msg->getBody(), "\n";

// সম্পদ মুক্ত করুন
$channel->close();
$connection->close();

4. মেসেজ গ্রহণ করা

4.1. কিউ সংজ্ঞায়িত এবং এক্সচেঞ্জ এর সাথে বাঁধান

কিউ মেসেজ গুলি কনসিউম করতে, আপনাকে প্রথমে একটি কিউ সংজ্ঞায়িত করতে এবং তারপরে কিউটি লক্ষ্য এক্সচেঞ্জ এর সাথে বাঁধতে হবে। নীচে, একটি কিউ সংজ্ঞায়িত এবং একটি নির্দিষ্ট এক্সচেঞ্জ এর সাথে বাঁধা করা হয়েছে।

// একটি কিউ সংজ্ঞায়িত করুন, যদি কিউর নাম ফাকা থাকে, তবে একটি অনন্য আইডি স্বয়ংক্রিয়ভাবে তৈরি করা হয় এবং কিউর নাম প্রত্যাহার করা হয়।
list($queue_name, ,) = $channel->queue_declare(
    "", // কিউর নাম, পুনরাবৃত্তি করা যাবে না, যদি ফাঁকা হয