使Laravel使用数据库队列而不是同步

时间:2016-11-11 13:51:22

标签: queue laravel-5.3

如果有人可以帮助我,我需要帮助Laravel Queues,到目前为止我已经完成了这些步骤

  1. 将.env文件中的QUEUE DRIVER更改为数据库

  2. 为队列表作业和失败作业创建了迁移

    php artisan queue:table
    php artisan queue:failed-table
    
  3. 我已经运行了php artisan migrate

    1. 创建了一个新的作业

      php artisan make:job SendNewArticleNotification
      
    2. 更新

      好的,我创建了一个路由/队列

      Route::get('/queue', function () {
      
          dispatch(new \App\Jobs\SendNewArticleNotification);
      
      });
      

      在我的Job SendNewArticleNotification中我有这个

      <?php
      
      namespace App\Jobs;
      
      use App\User;
      use Illuminate\Bus\Queueable;
      use Illuminate\Queue\SerializesModels;
      use Illuminate\Queue\InteractsWithQueue;
      use Illuminate\Contracts\Queue\ShouldQueue;
      
      class SendNewArticleNotification implements ShouldQueue
      {
          use InteractsWithQueue, Queueable, SerializesModels;
      
          /**
           * Create a new job instance.
           *
           * @return void
           */
          public function __construct()
          {
              //
          }
      
          /**
           * Execute the job.
           *
           * @return void
           */
          public function handle()
          {
      
              $users = User::all();
      
              $article = \App\Article::first();
      
              foreach ($users as $user) {
                  $user->notify(new \App\Notifications\Published($article));
              }    
      
      
          }
      }
      

      当我点击我的/队列路线时,电子邮件正在发送,但他们没有使用数据库表......发送50封邮件需要30多秒......

      更新

      好吧我终于弄明白了dispatch()需要在控制器方法内部,因为控制器有特征调度作业....现在我的作业在数据库表作业中排队....所以如何我会在幕后触发它们吗?

1 个答案:

答案 0 :(得分:2)

将调度发送到控制器方法中,然后运行

php artisan queue:work