2014-05-07 14 views
8

इम ईमेल भेजने के लिए और करने के लिए मेल :: कतार का उपयोग करने की कोशिश कर भेजने के लिए, लेकिन यह सरल मेल भेजता है जब मैं इस समारोह कहते हैं, और प्रतिक्रिया देरी हो रही है ... मैंने सोचा था कि मेल :: कतार का उपयोग करने का बिंदु क़तार में ....Laravel: मेल कतार में कैसे बाद में

मैं प्रतिक्रिया तुरंत आया, के लिए ईमेल जैसे

Mail::queue('emails.template', $data, function($message) { 
    $message->to('[email protected]'); 
    $message->subject('Notificacion'); 
}); 

return Response::json(array('error' => 0, 'message' => 'Ok')); 

मैं के लिए

भेजे जाने के लिए प्रतीक्षा किए नहीं चाहता था मेल भेजने के इंतजार किए बिना प्रतिक्रिया प्राप्त करना चाहते हैं। मैं यह कैसे कर सकता हूं ???

+0

विधि मेल :: बाद में, एक ही बात करता है यह सिर्फ इंतजार कर रहा है जो कुछ समय मैं यह बताना प्रतीक्षा करने के लिए और प्रतिक्रिया देरी हो रही है –

+0

यह व्यावहारिक रूप से असंभव है। आपको आपके ऑपरेशन निष्पादित सर्वर से प्रतिक्रिया मिलेगी। –

+0

@GabrielMatusevich क्या मुझे पता चलेगा कि आपको इसके बारे में कोई समाधान है या नहीं? मैं भी जब laravel5 – atom2ueki

उत्तर

3

क्या कतार ड्राइवर (app/config/queue.php - 'default' param) प्रयोग कर रहे हैं? यदि आप sync का उपयोग कर रहे हैं, और अन्य लोगों में से एक सेट अप नहीं किया है, तो आप सिंक्रोनस ड्राइवर का उपयोग कर रहे हैं, जो वास्तव में नाम कहता है: जैसे ही कार्य बनाया जाता है, आपके कतारबद्ध कार्य को चलाता है।

आप एक MQ सर्वर को कॉन्फ़िगर करने Laravel से बात करने के लिए की जरूरत है। आप इस के लिए एक नि: शुल्क iron.io खाता प्राप्त कर सकते हैं, और फिर आप यह कॉन्फ़िगर करने के लिए, उदाहरण के लिए की जरूरत है:

'iron' => array(
    'driver' => 'iron', 
    'project' => 'iron-io-project-id', 
    'token' => 'iron-io-queue-token', 
    'queue' => 'queue-name', 
), 

तो यह अनुदेश धक्का जाएगा जब आप Mail::queue() का उपयोग करने के लिए iron.io. बस php artisan queue:listen चलाने के लिए और इसे चलाने छोड़ जबकि संदेशों कतार में धकेल दिया जाता है - आप फिर एक और धागा कतार पर सुन है करना होगा।

+1

यह वास्तव में सहायक है, लेकिन मैं वास्तव में किसी तरह एक और सेवा के आधार पर बिना स्थानीय स्तर पर यह करने के लिए तलाश कर रहा हूँ का उपयोग कर एक ही समस्याओं को पूरा: क्या beanstalkd के बारे में पी –

+0

?? क्या आपके पास इसके लिए एक उदाहरण कॉन्फ़िगर है? –

+1

लोहे का उपयोग करना वास्तव में इसे स्थापित करने का सबसे तेज़ तरीका होगा। बस '' default' beanstalkd' करने के लिए लाइन 18 पर बदल - beanstalkd के लिए, एक बार आप इसे स्थापित करते हैं, तो आप सिर्फ कॉन्फ़िगर किया गया डिफ़ॉल्ट का उपयोग करने में सक्षम होना चाहिए। – Wogan

-1
/** 
* Get all email recipients and include their user details for Mailgun's 
* template tags - %recipient.userToken% 
*/ 
private function getRecipients() 
{ 
    foreach (User::get() as $user) 
    { 
     $this->recipients[$user->email] = [ 
      'id' => $user->id, 
      'userToken' => $user->user_token, 
      'first_name' => $user->first_name, 
      'last_name' => $user->last_name, 
      'email' => $user->email 
     ]; 
    } 
} 

private function sendEmail() 
{ 
    $subject = 'Demo Subject'; 
    /** 
    * Data for the Blade template 
    */ 
    $data = [ 
     'foo' => 'bar' 
    ]; 
    // Inline the CSS for the email 
    $inliner = new InlineEmail('emails.some-email', $data); 
    $content = $inliner->convert(); 

    // Create Emails table entry for this email. Used for Mailgun webhooks 
    $email = Email::create(['user_id' => $this->userId, 'subject' => $subject, 'email_id' => str_random()]); 

    // Prepare the email addresses 
    $emailAddresses = array_column($this->recipients, 'email'); 

    $this->mailgun->sendMessage('demo.org', [ 
     "from" => '[email protected]', 
     "to" => implode(',', $emailAddresses), // Comma separated list of email addresses 
     "subject" => $subject, 
     "html" => $content, // Inlined CSS HTML from Blade 
     "text" => "Plain text message here", 
     "recipient-variables" => json_encode($this->recipients), // Required for batch sending, matches to recipient details 
     "v:messageId" => $email->id, // Custom variable used for webhooks 
    ]); 
} 
संबंधित मुद्दे