我是 laravel/lumen 的新手
我在几个小时前生成了一个新的流明项目,我正在尝试使用数据库驱动程序将作业发送到默认队列。
我的 .env 文件看起来像这样
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=xxxx
CACHE_DRIVER=file
QUEUE_DRIVER=database
关注官方Queues - Lumen我生成迁移以创建 jobs 和 failed_jobs 表。
config/queue.php 文件有默认配置
问题:
- 在运行命令
php artisan queue:work
之前,我尝试将作业发送到队列,Queue::push(new SendEmailJob)
但是 它立即运行,我还没有运行命令php artisan queue:work
。 我检查了数据库,表 job 是空的。 - 我运行命令
php artisan queue:work
向特定端点发出请求,使用此行之一将作业放入队列Queue::push(new SendEmailJob)
或dispatch(new SendEmailJob())
我没有收到任何错误,但作业队列仍然是空的
我做错了什么?
为什么在我运行命令 php artisan queue:work
之前队列处理所有作业?
提前致谢
最佳答案
- 您可以调度作业并在执行前请求延迟:
$this->dispatch((new ProcessJob($id))->delay(10)); // 10 ms
- 确保 worker 没有运行:
ps aux|grep queue
如果是,杀掉它。尽管最佳实践是在任何代码更改后重新启动 worker:
php artisan queue:restart
关于queue - 带有数据库驱动程序的 Lumen 队列作业不会填充表作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45625300/