phpsoftbox / queue
Queue and worker component for the PhpSoftBox framework
Requires
- php: ^8.4
- phpsoftbox/clock: dev-master
- phpsoftbox/database: dev-master
- psr/event-dispatcher: ^1.0
- psr/log: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpsoftbox/cli-app: dev-master
- phpsoftbox/cs-fixer: ^1.1.0
- phpunit/phpunit: ^11.2
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-21 07:46:11 UTC
README
About
phpsoftbox/queue — компонент очередей и воркера для PhpSoftBox. Включает минимальный контракт очереди, модель job, in-memory очередь и адаптер для работы с БД.
Ключевые свойства:
- контракт
QueueInterface - модель
QueueJobс попытками Workerс ретраями и обработкой ошибокDatabaseDriverдля использования БД через компонент Database- поддержка приоритета и отложенной доступности (available_datetime)
- поддержка mutex-ключей на job для ограничения параллельных запусков
- запись задач, исчерпавших попытки, через
FailedJobStoreInterface - прогресс выполнения через
ProgressAwareInterface/ProgressStoreInterface - события жизненного цикла воркера:
before,after,onStatusChange - поддержка отмены для задач с флагом
is_cancellable - композиция application-level handlers через
CompositeQueueJobHandler
Quick Start
use PhpSoftBox\Queue\Drivers\InMemoryDriver; use PhpSoftBox\Queue\ProgressAwareInterface; use PhpSoftBox\Queue\QueueJob; use PhpSoftBox\Queue\Worker; $queue = new InMemoryDriver(); $queue->push( QueueJob::fromPayload(['type' => 'email', 'id' => 10]) ->withMutex('tenant:1:company:15:import', 7200), ); $worker = new Worker($queue, maxAttempts: 3); $worker->run(function (mixed $payload, QueueJob $job, ProgressAwareInterface $progress): void { $progress->setTotal(100); $progress->increment(); // обработка задания });
Очередь в БД:
use PhpSoftBox\Database\Configurator\DatabaseFactory; use PhpSoftBox\Database\Connection\ConnectionManager; use PhpSoftBox\Queue\Drivers\DatabaseDriver; use PhpSoftBox\Queue\DatabaseQueueSchema; $factory = new DatabaseFactory([ 'connections' => [ 'default' => 'main', 'main' => [ 'read' => ['dsn' => 'sqlite:///:memory:'], 'write' => ['dsn' => 'sqlite:///:memory:'], ], ], ]); $queue = new DatabaseDriver(new ConnectionManager($factory), new DatabaseQueueSchema(), 'main');
Выбор хранилища прогресса
Очередь хранит задания, а progress-store — их состояние и запросы отмены. Это независимые настройки: memory-очередь не отключает прогресс автоматически.
use PhpSoftBox\Queue\ProgressStoreFactory; $factory = new ProgressStoreFactory(); // Общая БД для HTTP-процесса и worker. $connections — ConnectionManagerInterface. $database = $factory->create([ 'progress_driver' => 'database', 'progress_connection' => 'default', ], $connections); // Только внутри текущего процесса и экземпляра объекта. $memory = $factory->create(['progress_driver' => 'memory']); // Явное отключение наблюдения за прогрессом и запросов отмены. $disabled = $factory->create(['progress_driver' => 'null']);
Если progress_driver отсутствует, выбирается database, даже если driver=memory.
PHP null, пустая строка и неизвестные значения приводят к ошибке, не к fallback.
Для memory один и тот же экземпляр передают worker и всем читателям/отправителям
отмены; фабрика не кеширует объекты. Для раздельных процессов используйте database.
Подробнее: прогресс и отмена, переход на явный выбор хранилища.