PHP RabbitMQ কাজের মোড

RabbitMQ-তে Work mode এটি অনেকগুলি কনসিউমার কনফিগার করে, একই কিউ থেকে মেসেজ প্রসেস করা, যা মেসেজগুলির সময়সীমান প্রসেসিং দ্রুততা বাড়াতে পারে। বিশেষ বিবরণ নীচের ডায়াগ্রামে দেখানো হয়েছে:

RabbitMQ Work Mode

নোট: RabbitMQ যেকোন কাজের মোড ব্যবহার করা হোক না কেন, প্রতিটি কিউ সমর্থন করে অনেকগুলি কনসিউমার, এবং একই কিউতে একটি মেসেজ শুধু মাত্র একটি কনসিউমার দ্বারা প্রসেস করা হবে।

১। প্রয়োজনীয় টিউটোরিয়াল

সম্পর্কিত ধারণাগুলি বুঝতে, দয়া করে নিম্নলিখিত অনুপ্রেরণা সেকশনগুলি পড়ুন:

২। PHP-তে একাধিক কনসিউমার প্রয়োগ করা

PHP নিজেই মাল্টি-থ্রেডিং এবং কোরুটিন এরকম পরস্পরকে সমর্থন করে না, তাই সাধারণভাবে এটি কনকারেন্ট প্রসেসিং অর্জনের জন্য বহু-প্রসেস ব্যবহার করে। এখানে, আমরা কিউতে প্রসেসিং করতে বহু প্রসেসের পরিচালনা করার জন্য মাল্টি-প্রসেস মোড ব্যবহার করি।

২.১। ম্যানুয়ালি প্রক্রিয়া চালিয়ে যাওয়া

বহুপ্রসেস বাস্তবায়ন করতে, সবচেয়ে সহজ উপায়টি হলো ম্যানুয়ালি PHP কমান্ডটি একাধিক বার চালিয়ে দেয়া।

যেমন: আগের সেকশনে কনসিউমার স্ক্রিপ্টটি recv.php মানিয়ে নেওয়া হলে, আমরা অনেকগুলি শেল উইন্ডো খুলে কনসিউমার স্ক্রিপ্টটি এভাবে পুনরায় পুনরায় চালাতে পারি:

php recv.php

php recv.php

বা একই শেল উইন্ডোয়ে, স্ক্রিপ্টটি ব্যাকগ্রাউন্ডে রান করার জন্য স্ক্রিপ্টটি এই ভাবে দেওয়া যাবে:

php recv.php &
php recv.php &

ব্যাখ্যা: এই ম্যানুয়াল উপায়ে বহুপ্রসেস বাস্তবায়নের অসুবিধা হলো, প্রক্রিয়াগুলি ভালভাবে পরিচালনা করা হয় না, কোনও প্রক্রিয়া পুনরায় চালু করা হয় না। যদি একটি প্রক্রিয়া ক্র্যাশ হয়, তা স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে না।

২.২। সুপারভাইজার ব্যবহার করে বহু প্রসেস বাস্তবায়ন

সুপারভাইজার হল একটি প্রসেস মনিটর লিনাক্স অপারেটিং সিস্টেমে, যা PHP প্রসেসগুলি মনিটর করে। যদি একটি PHP প্রসেস ক্র্যাশ হয়, তা স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে। এটি প্রসেসের সমপর্কে নির্দিষ্ট ভূক্তি করা যেতে পারে, বহু কনসিউমারের সমপর্কে উপনিবেশ করা হচ্ছে।

ইউবুন্টু ব্যবহার করা উদাহরণ: ইনস্টলিং সুপারভাইজার:

sudo apt-get install supervisor

সুপারভাইজার কনফিগার করা:

সুপারভাইজারের কনফিগারেশন ফাইলটি প্রায়ই /etc/supervisor/conf.d ডিরেক্টরিতে অবস্থিত থাকে। এই ডিরেক্টরিতে, আপনি আমাদের প্রসেসগুলি মনিটর করতে সুপারভাইজারকে কতগুলি কনফিগারেশন ফাইল তৈরি করতে পারেন। উদাহরণস্বরূপ, আমাদের কনসিউমার প্রসেসগুলি মনিটর করার জন্য rabbitmq-worker.conf নামে একটি ফাইল তৈরি করুন।

উদাহরণ: ফাইল: rabbitmq-worker.conf

[program:rabbitmq-worker]
process_name=%(program_name)s_%(process_num)02d
command=php recv.php
autostart=true
autorestart=true
user=root
numprocs=10
redirect_stderr=true
stdout_logfile=/var/log/worker.log

প্যারামিটার ব্যাখ্যা:

  • process_name: প্রসেসের নামের সংজ্ঞা, যেটি কোনও নাম দেওয়া যেতে পারে। এখানে, দুটি ভেরিয়েবল ব্যবহার করা হয়েছে: program_name (প্রসেসের নাম) এবং process_num (প্রসেস নাম্বার)।
  • command: আমাদের যে কমান্ডটি রান করতে হবে।
  • autostart: খুদানুর্বাণিকভাবে কি শুরু করা হবে না।
  • autorestart: খুদানুর্বাণিকভাবে কি পুনরায় চালু হবে না।
  • user: কোন সিস্টেম অ্যাকাউন্ট ব্যবহার করতে হবে কমান্ড চালাতে।
  • numprocs: কতগুলি সমৈতিক প্রসেস, কতগুলি প্রসেস শুরু করতে তা নির্দেশ করে।
  • stdout_logfile: চলার লগ ফাইল কোথায় সেভ হয়।