我对laravel --queue
选项和reserved
列(使用mysql)感到困惑。
1- laravel文件说明:
php artisan queue:listen --queue=high,low
在此示例中,将始终处理高队列上的作业 从低级队列转移到作业之前。
假设我有high
个职位和多个low
职位。作业high
被解雇,因为一个问题被推回队列,在60秒后再次开火。在这个时期发生了什么?工作low
开始还是没有?
2- queue:work --daemon
是否像queue:listen
一样工作?我的意思是它处理像listen
那样的所有工作吗?
3- reserved
列是什么?
答案 0 :(得分:1)
我只能在这里猜测,但我认为high
工作会在low
之前重试。这就是为什么在运行worker时应该使用tries=3(or whatever)
标志或将public $tries = 5;
添加到Job类的原因。或者你可以利用InteractsWithQueue
特性进行更精细的控制。
我相信,当您使用queue:work
命令时,默认情况下,Laravel版本默认以守护进程模式运行。守护进程工作进程使用寿命长,工作速度更快,因为它们不需要为每个新作业重新启动整个框架。 queue:listen
命令甚至没有记录在最新的(5.4)版本文档中。由此命令生成的worker在每次作业轮询之前重新启动。就个人而言,我仍然使用它,因为我在运行守护进程工作时遇到内存问题。
据我所知,此列是标记特定作业何时开始执行的方式。在queue.php
配置文件中,您可以指定连接何时应重试作业。我认为连接决定是否应该通过查看reserved
列来重试作业。
答案 1 :(得分:0)
由于没有可接受的答案,而我碰巧要搜索并调查所有这些问题,所以让我回答它们:
low
中的个作业将至少处理60秒。 60秒后,high
中的作业将变为可用,因此将在其余low
个作业之前对其进行处理。
在撰写本文时,即2019年3月,从版本5:3开始,建议的队列使用方式为queue:work
,即queue:listen
在当前版本中,有一个reserved_at
列代表将作业分配给工人进行处理的时间。