Запуск ремесленной очереди: работа с дополнительными аргументами

Я пытаюсь запустить задания в очереди и передать дополнительные параметры через командную строку. Мой вариант использования таков:

У меня есть 4 запущенных процесса queue:work через супервизора. Все задания в моей очереди требуют доступа к прокси-серверу, через который я могу одновременно запускать только 4 процесса. Когда я запускаю задание в очереди, мне нужно найти номер процесса (от 1 до 4), который в данный момент не используется, а затем запустить мою команду через этот процесс.

Я использую таблицу базы данных для хранения процессов, и в ней есть столбец для in_use, который отслеживает, используется ли он, но проблема, которую я вижу, заключается в том, что когда две команды queue:work выполняются одновременно, один и тот же прокси-процесс может быть выбран из база данных для обоих.

Что я хочу

php artisan queue:work --process=1

Затем каким-то образом получить этот аргумент внутри задания, чтобы я мог запускать свои 4 процесса каждый в супервизоре отдельно.

В качестве обходного пути я создал пользовательскую команду artisan, которая будет принимать аргумент, но при этом я теряю функциональность очереди. Я не хочу разрабатывать собственный процесс очереди.

Есть ли способ передать этот аргумент? Или, в качестве альтернативы, есть ли способ, которым я мог бы выталкивать задания из очереди из моей пользовательской команды artisan, а затем запускать их вручную, а не через queue:work?


person Jeff    schedule 12.02.2016    source источник
comment
Почему бы не создать выделенную очередь для этих процессов? Затем вы можете указать, в какую очередь ваша задача должна быть помещена, и таким образом она автоматически использует соединение, которое вы хотите для прокси? laravel.com/docs/5.1/queues#pushing-jobs- в очередь см. раздел "Указание очереди для задания"   -  person Jirennor    schedule 12.02.2016
comment
Это может быть то, что я в конечном итоге делаю .... Как бы вы получили идентификатор процесса изнутри задания? Я предполагаю, что когда я пытаюсь создать задание, я мог бы запросить таблицу jobs, сколько заданий стоит в очереди для каждого процесса, а затем поместить задание в наименьшую очередь и передать тот же идентификатор процесса в конструктор задания?   -  person Jeff    schedule 12.02.2016
comment
Мне трудно сказать вам, как это сделать, потому что я не знаю структуру вашего кода. Я надеюсь, что вы найдете способ заставить его работать на вас!   -  person Jirennor    schedule 12.02.2016
comment
@ThomasSnijder В итоге я поступил так, вы можете опубликовать ответ, который я могу принять   -  person Jeff    schedule 12.02.2016


Ответы (1)


Проблема может быть решена с помощью выделенных очередей. Таким образом, к каждой очереди прикреплен определенный прокси-процесс. Осталось только создать функцию/процесс, чтобы определить, в какую очередь должен идти процесс.

https://laravel.com/docs/5.1/queues#pushing-jobs-onto-the-queue

Ознакомьтесь с частью: Указание очереди для задания

person Jirennor    schedule 13.02.2016