在 laravel 中创建动态侦听、工作或监视队列的进程
Create a process to dynamically listen, work or monitor queues in laravel
我陷入了一个问题,我必须动态创建队列并且这些队列应该开始监听分配给它们的所有活动作业。 "Using general queue" 在我的案例中是不可行的,因为由于此类通用队列中的长作业链,任务执行延迟呈指数增长。
假设有以下工作(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
....等等。
有什么方法可以监听所有那些具有正在调度的队列名称的队列吗?
很想知道。
动态队列 不是个好主意。跟上 queues
或 process runner CLIs
是低效的,因为这种架构会很快占用内存并且也很难实现。
你可以做的是为这个进程设置固定数量的队列,并使用循环算法在这些队列中安排任务。一个好的方法可以如下:
- 在环境变量中设置队列数(例如
QUEUES=5
),以便您可以随着进程的增加而增加。
- 从 .env 获取值后创建队列名称数组(例如
env("QUEUES")
)。
- 在您
dispatch a job
在循环中使用 YourWorker::dispatch($data)->onQueue($queueName)
的代码中。
- 现在,创建主管和 run those queue workers from it using
php artisan queue:listen --queue <queue-name>
. Go through this doc 以获取有关如何 运行 流程的更多信息。
我陷入了一个问题,我必须动态创建队列并且这些队列应该开始监听分配给它们的所有活动作业。 "Using general queue" 在我的案例中是不可行的,因为由于此类通用队列中的长作业链,任务执行延迟呈指数增长。
假设有以下工作(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 ....等等。
有什么方法可以监听所有那些具有正在调度的队列名称的队列吗?
很想知道。
动态队列 不是个好主意。跟上 queues
或 process runner CLIs
是低效的,因为这种架构会很快占用内存并且也很难实现。
你可以做的是为这个进程设置固定数量的队列,并使用循环算法在这些队列中安排任务。一个好的方法可以如下:
- 在环境变量中设置队列数(例如
QUEUES=5
),以便您可以随着进程的增加而增加。 - 从 .env 获取值后创建队列名称数组(例如
env("QUEUES")
)。 - 在您
dispatch a job
在循环中使用YourWorker::dispatch($data)->onQueue($queueName)
的代码中。 - 现在,创建主管和 run those queue workers from it using
php artisan queue:listen --queue <queue-name>
. Go through this doc 以获取有关如何 运行 流程的更多信息。