创建一个进程以动态侦听,工作或监视laravel中的队列

时间:2019-01-24 07:46:19

标签: php laravel queue artisan

我陷入一个必须动态创建队列的问题,这些队列应该开始侦听分配给它们的所有活动作业。在我的情况下,“使用通用队列”是不可行的,因为由于此类通用队列中的作业链较长,因此任务执行延迟成倍增加。

让我们假设有以下工作(A,B,C,D,E,F,.....)

让X为唯一的单个或顺序队列。因此,队列X的工作分配如下:

队列X = A,B,C,D,E,F,......

这种情况会阻止其他队列可以同时处理的其他作业。因此,我要做的是为属于类别的每个作业动态创建某些队列。对于这些作业,将生成队列(例如X,Y,Z等):

队列X = A,D,F

队列Y = B,E

队列Z = C ....等等。

有没有办法监听所有调度了队列名称的队列?

爱相识。

1 个答案:

答案 0 :(得分:3)

动态队列不是一个好主意。跟上queuesprocess runner CLIs效率很低,因为这种体系结构会如此迅速地占用内存,也很难实现。

您可以做的是为此过程设置固定数量的队列,并使用循环算法调度其中的任务。好的方法如下:

  • 在env变量(例如QUEUES=5)中设置队列数,以便您可以随着进程的增加而增加队列数。
  • 从.env(例如env("QUEUES"))获取值后,创建一个队列名称数组。
  • 在循环中dispatch a job使用YourWorker::dispatch($data)->onQueue($queueName)的代码上。
  • 现在,创建一个主管,并使用php artisan queue:listen --queue <queue-name>从中创建run those queue workers。浏览this doc,以获取有关如何运行流程的更多信息。