我有一个laravel队列设置到数据库 . 当我运行 dd(env('QUEUE_DRIVER'))
时,我得到了 database
. 当我创建一份工作时,它会立即运行 . 我希望这份工作排队等到我运行 php artisan queue:work
. 我需要做什么才能让工作不立即运行 . 谢谢!
Edit 1:
发货代码:
for ($i=0; $i < 100; $i++) {
$job = new UpdateJob("");
dispatch($job);
}
职位代码:
public function handle(){
sleep(30);
SlackApi::SendMessage("Job!");
}
当我运行这个时,我每隔30秒就得到一条松弛的消息 . 但这些作业都没有存储在数据库中 .
Edit 2:
即使我将 ->delay(Carbon::now()->addMinutes(10))
添加到作业中,作业仍然会立即运行 .
2 回答
是否有主管在运行?如果配置了主管,队列将把这个工作作为子工作,因为它已添加到队列中 . 如果您希望延迟派遣作业,则必须指定延迟 . 请查看https://laravel.com/docs/5.4/queues#delayed-dispatching了解更多详情
问题似乎来自于从v5.1升级到v5.4我在app.php中添加了
Illuminate\Bus\BusServiceProvider::class
给我的提供程序并修复了所有问题 .