2016-12-30 5 views
8

मैं परियोजना जो वास्तविक समय पर अक्षांश और देशांतर का प्रसारण करने की जरूरत पर काम कर रहा हूँक्यों लैरवेल में ब्रॉडकास्टवेन्ट कतारबद्ध हैं? इसे कैसे रोकें?

मैं की तरह

namespace App\Events; 
use App\Events\Event; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 
use Illuminate\Support\Facades\Redis; 

class TrackersBroadcast extends Event implements ShouldBroadcast 
{ 
     public $lat, $lng,$imei,$date_time 

    use SerializesModels; 

    /** 
    * Create a new event instance. 
    * 
    * @return void 
    */ 
    public function __construct(
            $lat, 
            $lng, 
            $imei, 
            $date_time 

           ) 

    { 
     $this->lat = $lat; 
     $this->lng = $lng; 
     $this->imei = $imei; 
     $this->date_time = $date_time; 

    } 

    /** 
    * Get the channels the event should be broadcast on. 
    * 
    * @return array 
    */ 
    public function broadcastOn() 
    { 
     return ['tracker-channel']; 
    } 


} 

कुछ मामले में नीचे मैं वास्तविक समय ईमेल को गति प्रदान करने की जरूरत है कुछ है, तो मैं laravel लागू करने का फैसला जैसे

नीचे
namespace App\Jobs; 

use App\Jobs\Job; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Mail; 

class SendAlertEmail extends Job implements ShouldQueue 
{ 
    use InteractsWithQueue, SerializesModels; 
    public $data; 
    /** 
    * Create a new job instance. 
    * 
    * @return void 
    */ 
    public function __construct($data) 
    { 
     $this->data=$data; 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     // 
     Mail::send('emails.test', ['testVar' => $this->data], function($message) { 
      $message->from('[email protected]', 'Website Name'); 
      $message->to('[email protected]')->subject('A simple test'); 
     }); 
    } 
} 

जब भी मैं चलाने php artisan queue:listen database यह मेरी प्रसारण घटना भी कतार होगा संदेश कतार। मैं प्रसारण कार्यक्रम कतार नहीं करना चाहता हूं। उसको कैसे करे?

enter image description here

+0

ईवेंट प्रसारण के लिए आप किस ड्राइवर का उपयोग कर रहे हैं? रेडिस या पुशर? – vijaykumar

+0

मैं रेडिस – sumit

+0

का उपयोग कर रहा हूं, आप इसे कई कतार प्रक्रिया का उपयोग करके प्राप्त कर सकते हैं जैसा कि मैंने नीचे दिए गए उत्तर में उल्लेख किया है। – Gayan

उत्तर

3

क्योंकि यदि आप ShouldBroadcast इंटरफ़ेस का विस्तार करते हैं तो लार्वाले इवेंट ब्रॉडकास्टिंग डिफ़ॉल्ट रूप से कतारबद्ध होता है। यदि आप इवेंट ब्रॉडकास्टिंग कतारबद्ध नहीं करना चाहते हैं, तो आपको ShouldBroadcastNow इंटरफ़ेस का विस्तार करना चाहिए।

use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow; 

class TrackersBroadcast implements ShouldBroadcastNow 
{ 
...... 
} 

तो इसका मतलब है कि आपका ईवेंट प्रसारण सिंक कतार ड्राइवर का उपयोग करेगा।

+1

पार्टी के लिए देर हो चुकी है। इसने वास्तव में समस्या को हल करने में मेरी मदद की – sumit

+0

क्षमा करें, मुझे देर हो चुकी है;) – nmfzone

1

हो सकता है आप इस तरह प्रसारण घटना में कतार नाम का उल्लेख कर सकते हैं और उस कतार न सुनें बैठाना आप

//php artisan queue:listen --queue=broadcast-queue 

    /** 
     * @return string 
     */ 
     public function onQueue() 
     { 
      return 'broadcast-queue'; 
     } 
3

Laravel में सभी घटना प्रसारण कतारबद्ध है कार्रवाई करने के लिए की जरूरत नहीं है डिफ़ॉल्ट रूप से।

ईवेंट प्रसारित करने से पहले, आपको कतार श्रोता को कॉन्फ़िगर और चलाने की भी आवश्यकता होगी। सभी घटना प्रसारण कतारबद्ध नौकरियों के माध्यम से किया जाता है ताकि आपके आवेदन का प्रतिक्रिया समय गंभीर रूप से प्रभावित न हो।

यदि आपको दो कतार ड्राइवरों की आवश्यकता होगी। वास्तविक समय समर्थन के साथ घटना प्रसारण के लिए एक। कतार समर्थन के साथ ईमेल को संभालने के लिए एक। इसके लिए आपको दो कतार ड्राइवरों की आवश्यकता होगी। आप उन्हें config/queue.php

में अपने SendAlertEmail कक्षा में परिभाषित कर सकते हैं।

public $broadcastQueue = 'queue-name-for-handling-emails'; 

आपके TrackersBroadcast में वास्तविक समय कतार बताएं। यह आपका redis कतार ड्राइवर है।

public $broadcastQueue = 'real-time-queue'; 

Defining broadcast events

तहत Broadcast queue संदर्भ लें तो फिर तुम संदर्भ लें इस

$php artisan queue:listen --queue="queue-name-for-handling-emails" 
$php artisan queue:listen --queue="real-time-queue" 

की तरह अपने दो कतारों के लिए सुन सकते हैं Why event broadcast is queued ?

आशा है कि आप इस उपयोगी पाते हैं।

+0

आपका समाधान 2 कतारों को अलग करना है, क्षमा करें, यह अभी भी becuase में मदद नहीं करता है मुझे कतार से प्रसारण कार्यक्रम को बाहर करने की आवश्यकता है। मुझे एहसास हुआ कि सभी घटना प्रसारण कतारबद्ध हैं और हमें इसके बारे में परेशान नहीं होना चाहिए। आपके योगदान के लिए धन्यवाद। – sumit

संबंधित मुद्दे