solophp / async-event-dispatcher
Async event dispatcher with pluggable adapters
v1.0.0
2025-08-10 14:20 UTC
Requires
- php: ^8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.7
Suggests
- solophp/task-queue: ^2.1
README
Async event dispatcher with pluggable adapters.
Features
- Async dispatch via
$dispatcher->dispatch()
- Pluggable adapters:
InMemoryAdapter
,SoloTaskQueueAdapter
- Worker to consume and execute events
- Reference-based listener registry with priorities
- Customizable serialization via
SerializerInterface
- Framework-agnostic, minimal setup
Requirements
- PHP ^8.1
- Optional:
solophp/task-queue
^2.1 (forSoloTaskQueueAdapter
)
Install
composer require solophp/async-event-dispatcher
# Optional for DB-backed queue:
composer require solophp/task-queue
Usage (in-memory)
use Solo\AsyncEventDispatcher\{ReferenceListenerRegistry, ListenerReference, AsyncEventDispatcher, Worker}; use Solo\AsyncEventDispatcher\Adapter\InMemoryAdapter; final class UserRegistered { public function __construct(public string $username) {} } final class SendWelcomeEmail { public function __invoke(UserRegistered $e): void { echo "sent:" . $e->username . "\n"; } } $registry = new ReferenceListenerRegistry(); $registry->addReference(UserRegistered::class, new ListenerReference(SendWelcomeEmail::class)); $adapter = new InMemoryAdapter(); $publisher = new AsyncEventDispatcher($registry, $adapter); $worker = new Worker($adapter); $publisher->dispatch(new UserRegistered('john')); $worker->run();
Usage (Solo Task Queue Adapter)
use Solo\AsyncEventDispatcher\Adapter\SoloTaskQueueAdapter; use Solo\AsyncEventDispatcher\{AsyncEventDispatcher, Worker}; use Solo\TaskQueue\TaskQueue; $pdo = new PDO('sqlite:' . __DIR__ . '/var/queue.sqlite'); $queue = new TaskQueue($pdo); $queue->install(); $adapter = new SoloTaskQueueAdapter($queue); $publisher = new AsyncEventDispatcher($registry, $adapter); $worker = new Worker($adapter); $publisher->dispatch(new UserRegistered('john')); $worker->run();
Testing
# Run tests composer test # Run code sniffer composer cs # Fix code style issues composer cs-fix
License
This project is open-sourced under the MIT license.