如果有人可以帮助我,我需要Laravel Queues的帮助,到目前为止我已经完成了这些步骤
-
将.env文件中的QUEUE DRIVER更改为数据库
-
为队列表作业和失败作业创建了迁移
php artisan queue:table
php artisan queue:failed-table
我已经运行了php artisan migrate
- 创建了一个新的Job
php artisan make:job SendNewArticleNotification
更新:
好的,我已经创建了一个路由/队列
Route::get('/queue', function () {
dispatch(new \App\Jobs\SendNewArticleNotification);
});
在我的工作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秒...
UPDATE
好吧,我终于弄明白,dispatch()需要在控制器方法内部,因为控制器具有trait调度作业....现在我的作业在DB表作业中排队....所以我如何触发他们在幕后?
1 回答
将调度放入控制器方法然后运行