我正在创建一个laravel的网络应用程序,其中竞价是由用户在多个游戏中完成。竞标是由前端用户和cron作业执行的。Cron的工作在每一秒后在每一场比赛中出价。因此,当同一行同时被访问时,bids之间会发生一些冲突。为了解决并发问题,我决定使用laravel队列进行竞价。但我有多个游戏,因此我想同时出价每一场比赛。我不希望同一游戏的出价在同一时间被处理,因为这样可能会发生并发问题。我想了解一下laravel中的多队列系统。在互联网上搜索后,我了解了多个队列,比如
php artisan queue:work --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7但我不确定它是如何工作的。请有人给我详细解释一下,所有7个队列同时工作或一个接一个。
发布于 2018-05-29 15:48:43
正在寻找queue:listen命令?
queue:work将处理队列驱动程序存储的所有挂起作业,而queue:listen将等待作业被抛出,以便在作业到来时执行它们。
如果您执行php artisan queue:listen --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7,将创建7个队列,并监听它们自己的新任务。
在您的代码中,您可以像下面这样调度作业:
dispatch((new MyJob)->onQueue('myJobQueue'));您可能希望使用像Supervisor这样的工具来确保queue:listen始终在后台运行。
希望这能有所帮助!
发布于 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 &
这将在后台将每个队列作为单个进程运行。
发布于 2020-02-27 07:55:27
正如Ben V所说,强烈建议使用Supervisor始终保持工作进程处于活动状态,特别是如果您希望每个队列运行一个或多个工作进程,或者如果您希望同时处理这些队列。
以下是Supervisor配置文件示例:
[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。
然后只需使用以下命令将作业分派到正确的队列
dispatch((new MyJob)->onQueue('myJobQueue'));或
dispatch((new MyJob)->onQueue('myJobQueue1'));https://stackoverflow.com/questions/50576569
复制相似问题