phpsoftbox / queue
Queue and worker component for the PhpSoftBox framework
dev-master
2026-04-24 15:39 UTC
Requires
- php: ^8.4
- 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
This package is auto-updated.
Last update: 2026-04-24 15:39:42 UTC
README
About
phpsoftbox/queue — компонент очередей и воркера для PhpSoftBox. Включает минимальный контракт очереди, модель job, in-memory очередь и адаптер для работы с БД.
Ключевые свойства:
- контракт
QueueInterface - модель
QueueJobс попытками Workerс ретраями и обработкой ошибокDatabaseDriverдля использования БД через компонент Database- поддержка приоритета и отложенной доступности (available_datetime)
- поддержка mutex-ключей на job для ограничения параллельных запусков
- запись задач, исчерпавших попытки, через
FailedJobStoreInterface - прогресс выполнения через
ProgressAwareInterface/ProgressStoreInterface - события жизненного цикла воркера:
before,after,onStatusChange - поддержка отмены для cancellable-задач
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');