PHP RabbitMQ-এর সবচেয়ে সহজ কিউ মোডটি একটি প্রডিউসার এবং একটি কনস্যুমার থাকে, যেগুলি নীচের আর্কিটেকচারে দেখানো হয়েছে। PHP RabbitMQ ব্যাখ্যা: P প্রডিউসার দেখায়, C কনস্যুমার দেখায়, এবং লাল রঙ কিউ দেখায়।

বর্তমানে, PHP-তে RabbitMQ চালানোর সময় অফিসিয়াল পকেজ হলো 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('Hello World!');
// মেসেজটি দ্রুতগত কিনা
// $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();
// কিউ ঘোষণা
$channel->queue_declare('tizi365_hello', false, false, false, false);

// মেসেজ অবজেক্ট সংজ্ঞায়িত করুন
$msg = new AMQPMessage('Hello World!');
// মেসেজ প্রেরণ করুন
$channel->basic_publish($msg, '', 'tizi365_hello');

echo " [x] Sent 'Hello World!'\n";

$channel->close();
$connection->close();

ফাইলে সংরক্ষণ করুন: send.php

4. বার্তা গ্রহণ

বার্তা গ্রহণের প্রথম তিনটি পদক্ষেপ (RabbitMQ সংযোগ তৈরি করা, চ্যানেল তৈরি করা, কিউ ঘোষণা করা) বার্তা পাঠানোর মতোই, প্রতিটি অনুচ্ছেদের 3.1, 3.2, এবং 3.3 অনুসারে।

সম্পূর্ণ কনসিউমার কোডটি নিম্নলিখিতই:

<?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

5. ডেমো চালানো

দুটি শেল উইন্ডো খুলুন এবং দুটি স্ক্রিপ্টগুলি পৃথকভাবে প্রয়োগ করুন:

php recv.php

php send.php