2017-04-07 67 views
0

我有一份工作可以在用戶在應用程序中註冊時發送電子郵件。如何爲隊列創建作業:工作

SendWelcomeEmail.php

<?php 

namespace App\Jobs; 

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

class SendWelcomeEmail extends Job implements ShouldQueue 
{ 
    use InteractsWithQueue, SerializesModels; 

    protected $user; 
    /** 
    * Create a new job instance. 
    * 
    * @return void 
    */ 
    public function __construct(User $user) 
    { 
     $this->user = $user; 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle(Mailer $mailer) 
    { 
     $user = &$this->user; 

     $message = sprintf('Hello %s', $user->name); 

     $mailer->raw($message, function ($m) use ($user){ 
      $m->from('[email protected]', 'Lucas Lopes'); 
      $m->to($user->email, $user->name); 
     }); 
    } 
} 

我想創建一個作業執行PHP工匠隊列:每分鐘發送隊列中的電子郵件的工作命令。

回答

0

最簡單的方法是設置主管。

https://laravel.com/docs/5.4/queues#supervisor-configuration,它會自動重啓你的隊列:如果失敗,工作進程。

爲了解決這個困惑的你:

app/Console/Kernel.php文件,日程安排功能裏面你想補充一點,你想在一個特定的間隔內跑了命令。一個例子是: $schedule->command('SendFailedLoginsReport')->weekly()->mondays()->at('03:00');

在您的服務器,您可以將您的cron這樣 * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

這cron將會調用Laravel調度命令,每分鐘

0

您希望運行隊列守護進程,而不是運行命令。您需要在服務器環境中執行此操作,而不是使用laravels預定命令。

您可以使用類似的Linux的screen把你的命令。

這將consinuiously輪詢新的就業機會的隊列服務器,然後對其進行處理。

+0

不需要在設置命令'app/Console/Kernel.php'多久執行一次? –