Laravel

时间:2017-08-14 08:38:13

标签: php laravel

我在主管配置中将numprocs指定为8。但每次我派遣一份工作时,它基本上都会处理相同的工作8次:

[2017-08-14 02:00:11] Processed: App\Jobs\UpdateOrders
[2017-08-14 03:00:09] Processed: App\Jobs\UpdateOrders
[2017-08-14 04:00:07] Processed: App\Jobs\UpdateOrders
[2017-08-14 05:00:06] Processed: App\Jobs\UpdateOrders
[2017-08-14 06:00:10] Processed: App\Jobs\UpdateOrders
[2017-08-14 07:00:08] Processed: App\Jobs\UpdateOrders
[2017-08-14 08:00:09] Processed: App\Jobs\UpdateOrders
[2017-08-14 09:06:39] Processed: App\Jobs\UpdateOrders

这是我的主管配置的样子:

[program:product-manager]
process_name=%(program_name)s_%(process_num)02d
command=php artisan queue:listen
numprocs=8
autostart=true
autorestart=true
directory=/var/www/html
redirect_stderr=true
stdout_logfile=/var/www/logs/product-manager.log

如果我只派遣一份工作,如何设置它只使用一名工人。如果我派遣8个工作岗位,或者利用所有8名工人。这是它的工作方式吗?我对laravel队列中的多名工作人员如何工作有错误的想法?我真正想要的是让每个工人都在我分派的单独工作上工作。

1 个答案:

答案 0 :(得分:1)

我已经询问是否可以更新OP以了解队列配置。根据更新,这个答案可能被证明是错误的。

您的主管配置正在产生多个工作人员(使用Laravel内置工作程序,该工作程序不具有超级可扩展性或者必须“生产就绪”,但对于开发和测试来说很好),他们都试图从队列中消耗(我猜可能是数据库表。)

队列负责(例如Amazon SQS或AMQP等)确保队列中的消息仅被传递(消耗)一次。我希望您使用的队列不强制执行(如数据库),并且多个工作者一起使用相同的消息。 (一种race condition。)

可能我的了解数据库和artisan消费者的工作方式是错误的 - 在这种情况下,我相信我会被投票。那是我开始寻找的地方。