如果有人可以帮助我,我需要帮助Laravel Queues,到目前为止我已经完成了这些步骤
将.env文件中的QUEUE DRIVER更改为数据库
为队列表作业和失败作业创建了迁移
php artisan queue:table
php artisan queue:failed-table
我已经运行了php artisan migrate
创建了一个新的作业
php artisan make:job SendNewArticleNotification
更新
好的,我创建了一个路由/队列
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()需要在控制器方法内部,因为控制器有特征调度作业....现在我的作业在数据库表作业中排队....所以如何我会在幕后触发它们吗?
答案 0 :(得分:2)
将调度发送到控制器方法中,然后运行
php artisan queue:work