首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel中的多个队列

Laravel中的多个队列
EN

Stack Overflow用户
提问于 2018-05-29 12:58:04
回答 5查看 14.7K关注 0票数 5

我正在创建一个laravel的网络应用程序,其中竞价是由用户在多个游戏中完成。竞标是由前端用户和cron作业执行的。Cron的工作在每一秒后在每一场比赛中出价。因此,当同一行同时被访问时,bids之间会发生一些冲突。为了解决并发问题,我决定使用laravel队列进行竞价。但我有多个游戏,因此我想同时出价每一场比赛。我不希望同一游戏的出价在同一时间被处理,因为这样可能会发生并发问题。我想了解一下laravel中的多队列系统。在互联网上搜索后,我了解了多个队列,比如

代码语言:javascript
运行
复制
php artisan queue:work --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7

但我不确定它是如何工作的。请有人给我详细解释一下,所有7个队列同时工作或一个接一个。

EN

回答 5

Stack Overflow用户

发布于 2018-05-29 15:48:43

正在寻找queue:listen命令?

queue:work将处理队列驱动程序存储的所有挂起作业,而queue:listen将等待作业被抛出,以便在作业到来时执行它们。

如果您执行php artisan queue:listen --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7,将创建7个队列,并监听它们自己的新任务。

在您的代码中,您可以像下面这样调度作业:

代码语言:javascript
运行
复制
dispatch((new MyJob)->onQueue('myJobQueue'));

您可能希望使用像Supervisor这样的工具来确保queue:listen始终在后台运行。

希望这能有所帮助!

票数 6
EN

Stack Overflow用户

发布于 2019-04-12 00:51:18

php artisan queue:work --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7设置将执行队列的优先级。这样,myJobQueue上的所有作业都将先执行,然后再执行myJobQueue1上的作业,然后按该顺序转移到myJobQueue2

但是,如果您希望同时执行这些队列上的作业,则可以在后台运行每个队列。

php artisan queue:work --queue=myJobQueue & php artisan queue:work --queue=myJobQueue1 & php artisan queue:work --queue=myJobQueue2 &

这将在后台将每个队列作为单个进程运行。

票数 4
EN

Stack Overflow用户

发布于 2020-02-27 07:55:27

正如Ben V所说,强烈建议使用Supervisor始终保持工作进程处于活动状态,特别是如果您希望每个队列运行一个或多个工作进程,或者如果您希望同时处理这些队列。

以下是Supervisor配置文件示例:

代码语言:javascript
运行
复制
[program:laravel-worker-myJobQueue]
process_name=%(program_name)s_%(process_num)s
command=php artisan queue:work --queue=myJobQueue
numprocs=8
autostart=true
autorestart=true

[program:laravel-worker-myJobQueue1]
process_name=%(program_name)s_%(process_num)s
command=php artisan queue:work --queue=myJobQueue1
numprocs=1
autostart=true
autorestart=true

上面的配置为myJobQueue创建了8个worker,为myJobQueue1创建了1个worker,因为多个worker有助于加快速度,但对于试图访问数据库中同一行的作业来说,可能会造成麻烦,在这种情况下,您希望将事情限制为只有1个worker。

然后只需使用以下命令将作业分派到正确的队列

代码语言:javascript
运行
复制
dispatch((new MyJob)->onQueue('myJobQueue'));

代码语言:javascript
运行
复制
dispatch((new MyJob)->onQueue('myJobQueue1'));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50576569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档