switon / queue
Redis-backed job queue with runner discovery and worker commands for Switon Framework
v1.0.0
2026-06-06 13:43 UTC
Requires
- php: >=8.3
- psr/event-dispatcher: ^1.0
- switon/composer-extra: ^1.0
- switon/core: ^1.0
- switon/event: ^1.0
- switon/executor: ^1.0
- switon/redis: ^1.0
Requires (Dev)
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- switon/testing: ^1.0
README
Switon's Redis-backed queue transport for named queues, job discovery, delayed delivery, and worker/CLI execution.
Highlights
- Named queues: push, pull, consume, and delay all use logical queue names.
- Envelope metadata: each job keeps its body, headers, message id, queue name, and timestamp together.
- Job discovery:
#[Queued]binds runner jobs to logical queues. - Delayed delivery: delayed jobs can be surfaced back into the active queue.
- Worker and stats flow: CLI commands cover
queue:stats,queue:push,queue:run,queue:work, andqueue:migrate-due.
Installation
composer require switon/queue
Quick Start
use Switon\Core\Attribute\Autowired; use Switon\Core\RunnerInterface; use Switon\Queue\Attribute\Queued; use Switon\Queue\QueueEnvelope; use Switon\Queue\QueueInterface; class UserService { #[Autowired] protected QueueInterface $queue; public function register(int $userId): void { $this->queue->push('emails', QueueEnvelope::of(['userId' => $userId])); } } #[Queued('emails')] class SendWelcomeEmail implements RunnerInterface { /** * @param QueueEnvelope $payload */ public function run(mixed $payload): mixed { $userId = $payload->body['userId'] ?? null; return null; } }
Docs: https://docs.switon.dev/latest/queue
License
MIT.