#php #laravel #queue
Вопрос:
В моей настройке очереди Laravel есть несколько экземпляров, которые масштабируются по горизонтали и запускаются с помощью следующей команды (ниже):
php artisan queue:work --queue=high,default,low
Теперь мне нужно добавить еще один тип superlow
, который должен быть однопоточным. Работники очереди должны выполнять этот тип задания только по одному и не позволять другим работникам выполнять его до тех пор, пока оно не будет завершено.
php artisan queue:work --queue=high,default,low,superlow
- Тип очереди таков
database
- Я не смог найти такой вариант настройки в официальной документации
Комментарии:
1. Работники очереди должны выполнять этот тип задания только по одному и не допускать, чтобы другие работники выполняли его до тех пор, пока оно не будет завершено. это описывает, как всегда работают задания в очереди, если вы не имеете в виду, что одновременно может выполняться только одно сверхпоточное задание (независимо от того, что это такое).
2. Извините, если мое объяснение не совсем понятно. Допустим, у нас есть 10 сверхбыстрых рабочих мест и 5 рабочих. Один из рабочих поднимает его. Другие работники не возьмутся за какую-либо дополнительную работу, пока текущая не будет выполнена. По они могут выбрать высокий, низкий, по умолчанию в любое время.
3. Прямого способа сделать это нет, но вы можете «взломать» его, выполняя запланированную задачу каждую минуту на одном сервере и без перекрытия . Эта задача может быть чем-то вроде
Artisan::call('queue:work --once --queue=superlow')
или чем-то вроде этого.