Laravel Horizon: PHP में Redis कतारों का शक्तिशाली मॉनिटरिंग और प्रबंधन
आधुनिक PHP वेब डेवलपमेंट में, कतारों (queues) के माध्यम से एसिंक्रोनस टास्क प्रोसेसिंग एक मानक बन गई है। Laravel कतारों के लिए बिल्ट-इन सपोर्ट प्रदान करता है, लेकिन जब प्रोजेक्ट बड़ा हो जाता है, तो दर्जनों वर्कर्स को मैनेज करना, उनकी परफॉरमेंस ट्रैक करना और समस्याओं का निदान करना मुश्किल हो जाता है। यहीं पर Laravel Horizon काम आता है — Redis कतारों के मॉनिटरिंग और प्रबंधन के लिए एक शक्तिशाली टूल।
Horizon सिर्फ एक डैशबोर्ड नहीं है। यह एक पूर्ण कतार प्रबंधन प्रणाली है जो एक सुंदर वेब इंटरफ़ेस प्रदान करती है, जिससे आप कतारों के सभी पहलुओं को ट्रैक कर सकते हैं: प्रोसेस किए गए टास्क की संख्या, निष्पादन समय, त्रुटियों की संख्या, वर्कर्स की स्थिति और भी बहुत कुछ। मानक दृष्टिकोण के विपरीत, जहां आप मैन्युअल रूप से वर्कर्स चलाते हैं, Horizon उन्हें स्वचालित रूप से प्रबंधित करता है, कई प्रक्रियाओं के बीच लोड वितरित करता है और वर्तमान लोड के अनुसार उन्हें संतुलित करता है।
Horizon का मुख्य लाभ Redis के साथ इसका एकीकरण है। यह Redis का उपयोग न केवल कतार ड्राइवर के रूप में करता है, बल्कि मेट्रिक्स और वर्कर्स की स्थिति के भंडारण के लिए भी करता है। यह इसे अविश्वसनीय रूप से तेज़ और स्केलेबल बनाता है। आप कई सर्वरों पर Horizon चला सकते हैं, और यह सभी वर्कर्स से डेटा एकत्र करके एक ही कंट्रोल पैनल में दिखाएगा। यह प्रोडक्शन एनवायरनमेंट के लिए एक आदर्श समाधान है, जहां हर मिलीसेकंड मायने रखता है।
इंस्टॉलेशन
Horizon की इंस्टॉलेशन Composer के माध्यम से की जाती है — PHP के लिए मानक पैकेज मैनेजर। सुनिश्चित करें कि आपके पास Composer इंस्टॉल है और आपका प्रोजेक्ट Laravel 5.5+ का उपयोग करता है।
composer require laravel/horizon
पैकेज इंस्टॉल करने के बाद, इसकी कॉन्फ़िगरेशन फ़ाइलें और एसेट्स प्रकाशित करना आवश्यक है:
php artisan horizon:install
यह कमांड config/horizon.php कॉन्फ़िगरेशन फ़ाइल बनाएगा और Horizon सर्विस प्रोवाइडर को रजिस्टर करेगा। यदि आप Laravel 8+ का उपयोग कर रहे हैं, तो routes/horizon.php रूट फ़ाइल भी बनाई जाएगी।
इसके बाद, config/app.php में प्रोवाइडर जोड़ें (यदि यह स्वचालित रूप से नहीं जोड़ा गया है):
'providers' => [
// अन्य प्रोवाइडर...
App\Providers\HorizonServiceProvider::class,
],
उसके बाद, Horizon के लिए आवश्यक टेबल बनाने के लिए माइग्रेशन चलाएँ (हालाँकि मुख्य लॉजिक Redis का उपयोग करता है, कुछ डेटा डेटाबेस में संग्रहीत होता है):
php artisan migrate
अंत में, Redis को कॉन्फ़िगर करना आवश्यक है। सुनिश्चित करें कि Redis सर्वर इंस्टॉल और चल रहा है, और .env फ़ाइल में सही कनेक्शन पैरामीटर सेट हैं:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
त्वरित शुरुआत: न्यूनतम कार्यशील उदाहरण
इंस्टॉलेशन और कॉन्फ़िगरेशन के बाद, आप तुरंत Horizon चला सकते हैं और इसे एक्शन में देख सकते हैं।
चरण 1: Horizon चलाएँ
टर्मिनल में निम्न कमांड चलाएँ:
php artisan horizon
आप देखेंगे कि Horizon कई वर्कर प्रक्रियाएँ शुरू करता है। डिफ़ॉल्ट रूप से, यह default कतार से टास्क प्रोसेस करने के लिए तीन प्रक्रियाएँ बनाता है।
चरण 2: कतार के लिए एक टास्क बनाएँ
एक सरल टास्क बनाते हैं जो एक लंबी प्रक्रिया का अनुकरण करेगा:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProcessPodcast implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $podcastId;
public function __construct($podcastId)
{
$this->podcastId = $podcastId;
}
public fun