PHP के लिए कार्य कतारें: RabbitMQ, Gearman और Redis
\n\nआधुनिक PHP वेब एप्लिकेशन में, उपयोगकर्ता के मुख्य थ्रेड को ब्लॉक किए बिना लंबे या संसाधन-गहन संचालन करने की आवश्यकता अक्सर उत्पन्न होती है। ईमेल न्यूज़लेटर भेजना, रिपोर्ट तैयार करना, इमेज प्रोसेसिंग, वीडियो के साथ काम करना - ये सभी कार्य पृष्ठभूमि में एसिंक्रोनस रूप से करना बेहतर होता है। इसके लिए कार्य कतारें (job queues) मौजूद हैं - ऐसे तंत्र जो किसी कार्य के निष्पादन को स्थगित करने और वर्कर्स की सहायता से बाद में इसे संसाधित करने की अनुमति देते हैं।
\n\nइस लेख में, हम PHP में कार्य कतारों को व्यवस्थित करने के लिए तीन लोकप्रिय उपकरणों पर विचार करेंगे: RabbitMQ, Gearman और Redis। आप जानेंगे कि उनका उपयोग किन मामलों में करना है, और कोड उदाहरण देखेंगे।
\n\nकार्य कतारों की आवश्यकता क्यों है?
\n\nकतारों के उपयोग के मुख्य लाभ:
\n\n- \n
- एसिंक्रोनसिटी — उपयोगकर्ता भारी ऑपरेशन के पूरा होने की प्रतीक्षा नहीं करता। \n
- स्केलिंग — आप समानांतर प्रसंस्करण के लिए कई वर्कर्स चला सकते हैं। \n
- दोष सहनशीलता — यदि वर्कर क्रैश हो जाता है, तो कार्य कतार में रहता है और बाद में संसाधित होगा। \n
- जिम्मेदारी का पृथक्करण — कार्य भेजने का कोड और उसे संसाधित करने का कोड शिथिल रूप से जुड़े होते हैं। \n
1. RabbitMQ — शक्तिशाली संदेश ब्रोकर
\n\nRabbitMQ एक पूर्ण विकसित संदेश ब्रोकर है जो AMQP प्रोटोकॉल का समर्थन करता है। यह गारंटीकृत डिलीवरी, रूटिंग, पुष्टिकरण और बहुत कुछ प्रदान करता है। उच्च लोड वाले जटिल सिस्टम के लिए उपयुक्त है।
\n\nPHP में RabbitMQ के साथ काम करने के लिए php-amqplib एक्सटेंशन का उपयोग किया जाता है।
स्थापना
\ncomposer require php-amqplib/php-amqplib\n\nउदाहरण: कार्य भेजना
\n<?php\nrequire_once __DIR__ . '/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\n$channel->queue_declare('email_queue', false, true, false, false);\n\n$data = json_encode(['email' => 'user@example.com', 'subject' => 'नमस्ते!']);\n$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);\n\n$channel->basic_publish($msg, '', 'email_queue');\necho "कार्य कतार में भेज दिया गया\\n";\n\n$channel->close();\n$connection->close();\n\n\nउदाहरण: वर्कर (हैंडलर)
\n<?php\nrequire_once __DIR__ . '/vendor/autoload.php';\n\nuse PhpAmqpLib\\Connection\\AMQPStreamConnection;\n\n$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');\n$channel = $connection->channel();\n\n$channel->queue_declare('email_queue', false, true, false, false);\n\n$callback = function ($msg) {\n $data = json_decode($msg->body, true);\n echo "{$data['email']} को '{$data['subject']}' विषय के साथ ईमेल भेजा जा रहा है\\n";\n // यहाँ वास्तविक ईमेल भेजना\n $msg->ack(); // प्रसंस्करण की पुष्टि\n};\n\n$channel->basic_qos(null, 1, null);\n$channel->basic_consume('email_queue', '', false, false, false, false, $callback);\n\nwhile ($channel->is_consuming()) {\n $channel->wait();\n}\n\n\n2. Gearman — वितरित कार्य प्रणाली
\n\nGearman कार्यों के वितरित प्रसंस्करण में विशेषज्ञता रखता है। यह आपको दूरस्थ सर्वर पर या पृष्ठभूमि मोड में फ़ंक्शन कॉल करने की अनुमति देता है। माइक्रोसर्विस आर्किटेक्चर के लिए उपयुक्त है।
\n\nPHP के लिए gearman एक्सटेंशन (PECL) मौजूद है।
स्थापना
\nsudo apt install gearman-job-server\npecl install gearman\n\nउदाहरण: क्लाइंट (कार्य भेजना)
\n<?php\n$client = new GearmanClient();\n$client->addServer('127.0.0.1', 4730);\n\n$result = $client->doBackground('send_email', json_encode([\n 'email' => 'user@example.com',\n 'subject' => 'नमस्ते!'\n]));\n\necho "कार्य भेज दिया गया