Laravel队列优先级和保留

时间:2016-09-27 16:31:56

标签: laravel queue

我对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列是什么?

2 个答案:

答案 0 :(得分:1)

  1. 我只能在这里猜测,但我认为high工作会在low之前重试。这就是为什么在运行worker时应该使用tries=3(or whatever)标志或将public $tries = 5;添加到Job类的原因。或者你可以利用InteractsWithQueue特性进行更精细的控制。

  2. 我相信,当您使用queue:work命令时,默认情况下,Laravel版本默认以守护进程模式运行。守护进程工作进程使用寿命长,工作速度更快,因为它们不需要为每个新作业重新启动整个框架。 queue:listen命令甚至没有记录在最新的(5.4)版本文档中。由此命令生成的worker在每次作业轮询之前重新启动。就个人而言,我仍然使用它,因为我在运行守护进程工作时遇到内存问题。

  3. 据我所知,此列是标记特定作业何时开始执行的方式。在queue.php配置文件中,您可以指定连接何时应重试作业。我认为连接决定是否应该通过查看reserved列来重试作业。

答案 1 :(得分:0)

由于没有可接受的答案,而我碰巧要搜索并调查所有这些问题,所以让我回答它们:

    low中的
  1. 个作业将至少处理60秒。 60秒后,high中的作业将变为可用,因此将在其余low个作业之前对其进行处理。

  2. 在撰写本文时,即2019年3月,从版本5:3开始,建议的队列使用方式为queue:work,即queue:listen

    的守护版本。 li>
  3. 在当前版本中,有一个reserved_at列代表将作业分配给工人进行处理的时间。