Search by

phpsoftbox / queue

inspector-who

Queue and worker component for the PhpSoftBox framework

Package info

github.com/phpsoftbox/queue

pkg:composer/phpsoftbox/queue

Statistics

Installs: 128

Dependents: 4

Suggesters: 0

Stars: 0

Open Issues: 0

dev-master 2026-09-21 07:46 UTC

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.

Подробнее: прогресс и отмена, переход на явный выбор хранилища.

Оглавление