2017-04-07 29 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'多久执行一次? –