laravel 如何为所有动态队列运行队列工作进程?

5lhxktic  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(148)

我对laravel-queue的概念非常陌生,我们的项目有多个基于每个客户的数据库。我正在通过使用 queue-jobs 来实现工作流,我们在另一个名为secret_databases的数据库中维护的所有数据库列表将包含databaselist、作业和failed_jobs表。

databaselist表包含所有由客户或客户持有的数据库,从这个表我连接到所有工作正常的数据库,但当在jobs表中存储数据时,我修改了queue列值,从默认值到自定义值,如(DatabaseName ~ modulename),它也工作正常。

现在,当我运行php Artisan queue:work时,它不会处理任何作业,但数据在表中,因为它正在寻找defaultqueue。经过研究,我知道我必须运行以下命令
php artisan queue:work --queue_name
但在我的情况下,我不能像这样运行,因为我们总共有400个数据库和多个模块名称,在未来还可以添加更多的数据库,所以每次我不能手动运行指定queue_names
我正在寻找一个解决方案如何在所有queue-names中动态运行多个作业

daupos2t

daupos2t1#

基于动态放置规则的预定义表达式,在运行时期间自动创建动态队列。
YARN仅支持一个级别的动态叶队列。可以在“队列属性”的“动态自动创建队列”部分中查看动态创建的叶队列的队列属性。可以通过单击其受管父队列的“编辑子队列”选项来配置动态叶队列属性。在受管父队列级别设置的队列属性将应用于其所有叶队列。有关设置动态叶队列属性的详细信息,请参阅配置动态队列属性。

qgelzfjb

qgelzfjb2#

我自己做了一些研究,下面是我对这个问题的笔记和想法(请把它看作是一个信息性的答案,而不是正确的答案)。
正如你所说:
我将队列列值从默认值修改为自定义值,如(DatabaseName ~ modulename)
有没有一个好的理由为什么你会这样做?(也许你必须做一些测量或生成一些图表)
如果没有理由将作业分派到未定义数量的队列,则监听所有可能的队列没有意义,因为创建队列的原因是为了分离处理(连接与队列),以便可以设置一些队列优先级。
如果有很好的理由促使使用此方法,则应注意,每次在系统中创建新数据库/模块时,都要通过运行以下命令来重新启动队列:

php artisan queue:work --queue=db1module1,db2module2

在末尾附加新创建的数据库/模块将为db1module1设置高于dbNmoduleN的优先级(最后添加的将具有较低的优先级)。
也许使用以下命令重新启动可以解决上述问题,方法是为每个队列创建并行进程,但这意味着您的机器上将运行未定义数量的进程。

php artisan queue:work --queue=db1module1 & php artisan queue:work --queue=db2module2

相关问题