Идея данной библиотеки родилась в ходе изучения исходников Laravel Horizon.
Horizon запускает мастер-процесс, который порождает дочерние процессы для исполнения задач из очередей.
Мы запускаем мастер-процесс (supervisor
), который порождает и контролирует дочерние процессы (worker
).
Мастер процесс подписан на сигналы PCNTL. Получив сигнал, он сначала завершает дочерние процессы, а потом останавливается сам.
Класс artisan команды супервизора должен наследоваться от SMSkin\LaravelSupervisor\Commands\SupervisorsCommand
.
В классе необходимо реализовать метод protected function getWorkers(): Collection
, возвращающий коллекцию моделей рабочего процесса (классов, реализующих интерфейс SMSkin\LaravelSupervisor\Contracts\IWorker
).
Пример artisan команды можно посмотреть в ./src/Examples/TestSupervisorCommand.php
.
Класс artisan команды рабочего процесса должен наследоваться от SMSkin\LaravelSupervisor\Commands\WorkerCommand
.
В классе необходимо реализовать два метода:
public function getSubscribedSignals(): array
- массив PCNTL сигналов, которые прослушиваются данным процессомpublic function handleSignal(int $signal, false|int $previousExitCode = 0): int|false
- метод, вызываемый при получении PCNTL сигнала
Пример artisan команды можно посмотреть в ./src/Examples/TestWorkerCommand.php
.
Класс должен реализовывать интерфейс SMSkin\LaravelSupervisor\Contracts\IWorker
.
В классе необходимо реализовать метод public function getArtisanCommand(): string
, возвращающий artisan команду, которая соответствует рабочему процессу.
Пример класса можно посмотреть в ./src/Examples/TestWorker.php
.