PHP में कार्य कतारों के साथ काम करना: पूर्ण व्यावहारिक मार्गदर्शिका
\n\nआधुनिक वेब अनुप्रयोगों में, अक्सर उपयोगकर्ता को प्रतीक्षा कराए बिना लंबी या संसाधन-गहन संचालन करने की आवश्यकता होती है। ईमेल न्यूज़लेटर भेजना, PDF रिपोर्ट तैयार करना, छवियों को संसाधित करना, डेटा पार्स करना - ये सभी कार्य कार्य कतारों के माध्यम से अतुल्यकालिक प्रसंस्करण के लिए आदर्श हैं। इस लेख में, हम विस्तार से समझेंगे कि PHP में कार्य कतारों के साथ व्यावहारिक रूप से कैसे काम किया जाए, लोकप्रिय उपकरणों पर विचार करेंगे और कार्यशील कोड लिखेंगे।
\n\nकार्य कतार क्या है और इसकी आवश्यकता क्यों है?
\n\nकार्य कतार (job queue) एक तंत्र है जो आपको कार्यों को एक कतार में रखने और उन्हें HTTP अनुरोध प्रसंस्करण के मुख्य प्रवाह के बाहर अतुल्यकालिक रूप से निष्पादित करने की अनुमति देता है। किसी भारी संचालन को समकालिक रूप से करने (जैसे, पंजीकरण पर 1000 ईमेल भेजना) के बजाय, आप बस कार्य को कतार में रखते हैं और तुरंत उपयोगकर्ता को प्रतिक्रिया देते हैं। एक पृष्ठभूमि वर्कर (worker) कतार से कार्य लेता है और उन्हें एक-एक करके निष्पादित करता है।
\n\nकार्य कतारों के उपयोग के मुख्य लाभ:
\n- \n
- प्रदर्शन में वृद्धि — उपयोगकर्ता भारी संचालन के पूरा होने की प्रतीक्षा नहीं करता \n
- विफलता सहनशीलता — यदि कोई कार्य निष्पादित नहीं होता है, तो वह पुनः प्रसंस्करण के लिए कतार में वापस आ जाता है \n
- स्केलेबिलिटी — समानांतर प्रसंस्करण के लिए किसी भी संख्या में वर्कर चलाए जा सकते हैं \n
- लोड बफरिंग — कतार सिस्टम पर पीक लोड को सुचारू करती है \n
PHP में कार्य कतारों के लिए लोकप्रिय उपकरण
\n\n1. RabbitMQ
\nRabbitMQ एक शक्तिशाली संदेश ब्रोकर है जो AMQP प्रोटोकॉल का समर्थन करता है। यह जटिल रूटिंग परिदृश्यों के लिए आदर्श है और इसके लिए एक अलग सर्वर स्थापित करने की आवश्यकता होती है।
\n\n// Composer के माध्यम से स्थापना\ncomposer require php-amqplib/php-amqplib\n\n// कतार में कार्य भेजना\n<?php\nrequire_once 'vendor/autoload.php';\n\nuse PhpAmqpLib\\Connection\\AMQPStreamConnection;\nuse PhpAmqpLib\\Message\\AMQPMessage;\n\n$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');\n$channel = $connection->channel();\n$channel->queue_declare('email_queue', false, true, false, false);\n\n$data = json_encode([\n 'to' => 'user@example.com',\n 'subject' => 'नमस्ते!',\n 'body' => 'परीक्षण संदेश'\n]);\n\n$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);\n$channel->basic_publish($msg, '', 'email_queue');\n$channel->close();\n$connection->close();\n?>\n\n2. Redis + php-resque
\nRedis एक तेज़ in-memory स्टोरेज है जो सरल कतारों के लिए उपयुक्त है। php-resque लोकप्रिय Ruby लाइब्रेरी Resque का PHP पोर्ट है।
\n\n// स्थापना\ncomposer require chrisboulton/php-resque\n\n// कार्य बनाना\n<?php\nclass SendEmailJob\n{\n public function perform()\n {\n $args = $this->args;\n // ईमेल भेजने का तर्क\n mail($args['to'], $args['subject'], $args['body']);\n }\n}\n\n// कतार में जोड़ना\nResque::setBackend('localhost:6379');\nResque::enqueue('default', 'SendEmailJob', [\n 'to' => 'user@example.com',\n 'subject' => 'नमस्ते',\n 'body' => 'परीक्षण'\n]);\n?>\n\n3. Beanstalkd
\nBeanstalkd एक हल्का, तेज़ और विश्वसनीय कतार प्रबंधक है। यह स्थापित और कॉन्फ़िगर करने में सरल है, जो इसे छोटी परियोजनाओं के लिए एक उत्कृष्ट विकल्प बनाता है।
\n\n// स्थापना\ncomposer require pda/pheanstalk\n\n// कार्य भेजना\n<?php\nrequire_once 'vendor/autoload.php';\n\nuse Pheanstalk\\Pheanstalk;\n\n$pheanstalk = Pheanstalk::create('127.0.0.1:11300');\n$pheanstalk->useTube('email_tube')->put(\n json_encode(['to' => 'user@example.com', 'subject' => 'Test']),\n Pheanstalk::DEFAULT_PRIORITY,\n Pheanstalk::DEFAULT_DELAY,\n 60 // TTR (time to run)