2016-02-12 1 views
0

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

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

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

То, что я хочу

php artisan queue:work --process=1

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

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

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

+0

Почему бы не сделать предписанную очередь для этих процессов? Затем вы можете указать, в какую очередь должна быть нажата ваша задача, и таким образом она автоматически использует соединение, которое вы хотите для прокси-сервера? https://laravel.com/docs/5.1/queues#pushing-jobs-onto-the-queue см. часть Задание очереди для работы –

+0

Возможно, это то, что я делаю ... Как бы вы получили идентификатор процесса изнутри задания? Думаю, когда я пытаюсь создать задание, я могу запросить таблицу «jobs» для того, сколько заданий поставлено в очередь для каждого процесса, а затем направить задание на самую маленькую очередь и передать тот же идентификатор процесса в конструктор задания? – Jeff

+0

Мне сложно рассказать вам, как это сделать, потому что я не знаю структуру вашего кода. Я надеюсь, что вы поймете, как заставить его работать на вас! –

ответ

1

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

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

Заканчивать часть: Определение очереди для работы