Обработка динамически созданной очереди Laravel

Я использую Laravel Queues для обработки заданий для пользователей в фоновом режиме. Для каждого пользователя у меня есть отдельная очередь, например:

Process::withChain(
                            [
                                new Step1(),
                                new Step2()
                            ]
                        )->dispatch()->allOnQueue($user)->delay(now()->addMinutes(1));

теперь проблема в том, что я не знаю, как я могу динамически обрабатывать эти очереди, выполнив следующую команду

artisan queue:work --tries=3 --daemon --queue=<user_name>

любые комментарии/предложения приветствуются.


person Dakait    schedule 22.05.2019    source источник


Ответы (1)


Вы можете создать пользовательскую команду ремесленника, а затем в своем методе handle():

$queueName = ... // put your logic here
$this->call('queue:work', [
    '--tries' => 3, '--queue' => $queueName
]);

person Leonardo Rossi    schedule 22.05.2019
comment
Спасибо за ваше время. Насколько я понимаю, метод handle вызывается, когда есть прослушиватель очереди, работающий и обрабатывающий задания. Что делать, если прослушиватель очереди не запущен, а в очередь вставлено новое задание? Надеюсь, я ясно объяснил, чего я пытаюсь достичь :) - person Dakait; 22.05.2019
comment
Я немного смущен. Метод handle(), о котором я упоминал, находится внутри вашей специальной Artisan Command, см. laravel.com/docs/ 5.8/artisan#письмо-команды. В любом случае, о том, что вы просите, задание помещается в очередь, и если нет слушателя (т.е. работника очереди), оно просто остается там на неопределенный срок. - person Leonardo Rossi; 22.05.2019
comment
это то, чего я пытаюсь добиться, чтобы динамически запускать прослушиватель очереди. Спасибо за ваш вклад :) - person Dakait; 22.05.2019
comment
Возможно, вы можете добавить --stop-when-empty, потому что, если вы откроете 100 заданий, они останутся открытыми в процессах вашего сервера. - person Martin Tonev; 27.03.2020