solophp/async-event-dispatcher

Async event dispatcher with pluggable adapters

v1.0.0 2025-08-10 14:20 UTC

This package is auto-updated.

Last update: 2025-08-10 14:25:38 UTC


README

Latest Version on Packagist License PHP Version

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 (for SoloTaskQueueAdapter)

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.