PHP के लिए कार्य कतारें: RabbitMQ, Beanstalkd और Gearman
आधुनिक वेब अनुप्रयोगों में, उपयोगकर्ता को प्रतिक्रिया की प्रतीक्षा कराए बिना लंबी या संसाधन-गहन संचालन को एसिंक्रोनस रूप से निष्पादित करने की आवश्यकता होती है। विशिष्ट उदाहरण: ईमेल न्यूज़लेटर भेजना, रिपोर्ट तैयार करना, छवियों का प्रसंस्करण, बाहरी API के साथ इंटरैक्शन। PHP में इन समस्याओं को हल करने के लिए कार्य कतारों (job queues) का उपयोग किया जाता है। वे अनुरोध तर्क को पृष्ठभूमि प्रसंस्करण से अलग करते हैं, जिससे इंटरफ़ेस की प्रतिक्रियाशीलता और सिस्टम की स्केलेबिलिटी बढ़ती है।
इस लेख में, हम PHP में कतारों को व्यवस्थित करने के लिए तीन लोकप्रिय टूल: RabbitMQ, Beanstalkd और Gearman पर विस्तार से चर्चा करेंगे। आप उनकी विशेषताओं, आर्किटेक्चर, उपयोग के उदाहरणों के बारे में जानेंगे और अपने प्रोजेक्ट के लिए उपयुक्त समाधान चुनना सीखेंगे।
1. RabbitMQ
RabbitMQ एक शक्तिशाली मैसेज ब्रोकर है जो AMQP (Advanced Message Queuing Protocol) प्रोटोकॉल को लागू करता है। यह जटिल रूटिंग परिदृश्यों, एक्सचेंजों, प्राथमिकता वाली कतारों, डिलीवरी पुष्टिकरण और बहुत कुछ का समर्थन करता है। RabbitMQ माइक्रोसर्विस आर्किटेक्चर और उन सिस्टमों के लिए आदर्श है जहाँ विश्वसनीय संदेश वितरण की आवश्यकता होती है।
स्थापना और कनेक्शन
PHP में RabbitMQ के साथ काम करने के लिए php-amqplib लाइब्रेरी का उपयोग किया जाता है। Composer के माध्यम से स्थापना:
composer require php-amqplib/php-amqplibउदाहरण: ईमेल सूचना भेजना
पृष्ठभूमि में ईमेल भेजने के लिए एक प्रोड्यूसर (भेजने वाला) और एक कंज्यूमर (प्रोसेसर) बनाते हैं।
फ़ाइल producer.php:
<?phprequire_once 'vendor/autoload.php';
use PhpAmqpLib\\Connection\\AMQPStreamConnection;use PhpAmqpLib\\Message\\AMQPMessage;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();
$channel->queue_declare('email_queue', false, true, false, false);
$data = json_encode([ 'email' => 'user@example.com', 'subject' => 'स्वागत है!', 'body' => 'पंजीकरण के लिए धन्यवाद।']);
$msg = new AMQPMessage($data, [ 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);
$channel->basic_publish($msg, '', 'email_queue');
echo " [x] संदेश भेजा गया";
$channel->close();$connection->close();फ़ाइल consumer.php:
<?phprequire_once 'vendor/autoload.php';
use PhpAmqpLib\\Connection\\AMQPStreamConnection;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();
$channel->queue_declare('email_queue', false, true, false, false);
echo " [*] संदेशों की प्रतीक्षा। बाहर निकलने के लिए CTRL+C दबाएँ";
$callback = function ($msg) { $data = json_decode($msg->body, true); // ईमेल भेजने का अनुकरण sleep(2); echo " [x] {$data['email']} को ईमेल भेजा गया"; $msg->ack();};
$channel->basic_qos(null, 1, null);$channel->basic_consume('email_queue', '', false, false, false, false, $callback);
while ($channel->is_consuming()) { $channel->wait();}
$channel->close();$connection->close();2. Beanstalkd
Beanstalkd एक हल्का, तेज़ और उपयोग में आसान कतार प्रबंधक है। यह memcached के समान प्रोटोकॉल पर काम करता है और उन कार्यों के लिए उपयुक्त है जहाँ जटिल रूटिंग की आवश्यकता नहीं होती है। Beanstalkd प्राथमिकताओं, विलंब (delay) और time-to-run (TTR) का समर्थन करता है।
स्थापना
PHP के लिए pda/pheanstalk क्लाइंट उपलब्ध है:
composer require pda/pheanstalkउदाहरण: छवि प्रसंस्करण
मान लीजिए हमें अपलोड की गई छवियों के लिए थंबनेल बनाने की आवश्यकता है।
फ़ाइल producer.php:
<?phprequire_once 'v