我正在 Laravel 中创建一个 Web 应用程序,其中多个游戏中的用户正在竞标。投标由前端用户和 cron 作业执行。Cron 工作在每一秒之后对每场比赛进行竞标。因此,当同时访问同一行时,出价之间会发生一些冲突。为了解决并发问题,我决定使用 Laravel 队列进行竞价。但是我有多场比赛,因此我希望同时对每场比赛进行出价。我不希望同时处理同一游戏的出价,因为可能会发生并发问题。我想了解 Laravel 中的多队列系统。在互联网上搜索后,我了解了多个队列,例如
php artisan queue:work --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7
Run Code Online (Sandbox Code Playgroud)
但我不确定它是如何工作的。请有人详细解释一下,所有7个队列同时或一个一个地工作。
小智 8
php artisan queue:work --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7设置队列执行的优先级。因此,所有作业将先执行,然后再按顺序myJobQueue执行作业。myJobQueue1myJobQueue2
但是,如果您希望同时执行这些队列上的作业,则可以在后台运行每个队列。
php artisan queue:work --queue=myJobQueue & php artisan queue:work --queue=myJobQueue1 & php artisan queue:work --queue=myJobQueue2 &
这将在后台将每个队列作为单个进程运行。
正在寻找queue:listen命令?
queue:work将处理队列驱动程序存储的所有待处理作业,而queue:listen将等待作业被抛出以在它们到来时执行它们。
如果您这样做php artisan queue:listen --queue=myJobQueue, myJobQueue1, myJobQueue2,..myJobQueue7,将创建 7 个队列并自行侦听新任务。
在您的代码中,您可以分派如下作业:
dispatch((new MyJob)->onQueue('myJobQueue'));
Run Code Online (Sandbox Code Playgroud)
您可能想要使用像Supervisor这样的工具来确保queue:listen始终在后台运行。
希望这可以帮助!
这可能是旧的,但以防万一,所有答案都正确,但您必须将 .env 变量 QUEUE_CONNECTION 设置为除同步之外的其他内容,如果您的配置设置为同步,它将按照进入的顺序获取每个作业队列(从而完成一个然后开始下一个),如果它设置为数据库或redis,它将在需要时并行执行作业(这是设置优先级的想法),您应该查看这篇文章(它对我有帮助)https : //medium.com/hexavara-tech/optimize-laravel-with-redis-caching-made-easy-bf486bf4c58您还需要在 config/queue.php 中配置队列,例如在“connections”数组中:
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => ['default','another_queue'], //this is just 'default' by default
'retry_after' => 90,
],
Run Code Online (Sandbox Code Playgroud)
这适用于该文件中的所有其他配置。
| 归档时间: |
|
| 查看次数: |
12996 次 |
| 最近记录: |