我陷入一个必须动态创建队列的问题,这些队列应该开始侦听分配给它们的所有活动作业。在我的情况下,“使用通用队列”是不可行的,因为由于此类通用队列中的作业链较长,因此任务执行延迟成倍增加。
让我们假设有以下工作(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 ....等等。
有没有办法监听所有调度了队列名称的队列?
爱相识。
答案 0 :(得分:3)
动态队列不是一个好主意。跟上queues
或process runner CLIs
效率很低,因为这种体系结构会如此迅速地占用内存,也很难实现。
您可以做的是为此过程设置固定数量的队列,并使用循环算法调度其中的任务。好的方法如下:
QUEUES=5
)中设置队列数,以便您可以随着进程的增加而增加队列数。env("QUEUES")
)获取值后,创建一个队列名称数组。dispatch a job
使用YourWorker::dispatch($data)->onQueue($queueName)
的代码上。php artisan queue:listen --queue <queue-name>
从中创建run those queue workers。浏览this doc,以获取有关如何运行流程的更多信息。