tripcloud/async-event-dispatcher-bundle
Symfony bundle for asynchronous event dispatching, letting applications publish events without blocking the request. Integrates with Symfony's dispatcher to queue and process listeners in the background, improving response times and decoupling event handling in PHP applications.
Architecture fit. The package is a Symfony2 bundle, not a Laravel package. That distinction is load-bearing: Symfony bundles rely on the FrameworkBundle's kernel, DI container compiler passes, Resources/config service definitions, and the Symfony\Component\EventDispatcher\EventDispatcherInterface contract. Laravel's event system implements Illuminate\Contracts\Events\Dispatcher and has no bundle registration mechanism — integration would mean either pulling symfony/event-dispatcher into a Laravel app and maintaining two parallel dispatcher abstractions, or rewriting the package as a service provider. Neither is "integration"; both are a port.
Integration feasibility. Low. The package targets Symfony 2.x, which pins it to the PHP 5.x/7.0 era and to pre-php-amqplib v3 RabbitMQ client conventions. A modern Laravel application (10/11/12) runs PHP 8.1+ with typed properties, enums, and a Composer dependency graph that will not resolve against symfony/*:^2.x. Expect a hard dependency conflict before you reach the first line of glue code. The realistic path is vendoring the source and rewriting it, at which point you are not adopting a package — you are adopting a reference implementation.
Technical risk. Very high, and concentrated in provenance rather than code quality:
| Risk | Signal | Consequence |
|---|---|---|
| Abandonment | Symfony 2 EOL since Nov 2018; PHP 5.x/7.0 EOL | No security patches, no PHP 8 compatibility |
| No validation | 0 stars, 0 dependents, score 0 | No production usage to learn from; no issue history |
| Hosting | Bitbucket, likely private/team-internal origin | Uncertain licensing, no fork ecosystem, no Packagist mirror guarantees |
| Coupling | Symfony dispatcher contract + RabbitMQ transport in one artifact | Cannot swap either half independently |
The zero-dependent signal matters most to a TPM. A package with a hundred dependents has a de facto support network and a known failure surface. This one has neither, so every unknown becomes your team's to discover in production.
Key questions.
Stack fit. Poor as-is, workable as a pattern. Laravel already ships the exact primitives this bundle was built to provide: Event::listen for synchronous handlers, queued listeners and dispatchAfterResponse for async, and Horizon for worker supervision and observability. The bundle's only genuinely differentiating idea — routing dispatches through RabbitMQ rather than the framework's native queue — is reproducible with vladimir-yuldashev/laravel-queue-rabbitmq plus native events, with no Symfony baggage and no fork to own.
Migration path. Three options, ordered by recommendation:
Illuminate\Contracts\Events\Dispatcher, replace the DI config with a service provider, upgrade the AMQP client. Estimate 5–10 engineer-days plus a permanent fork-maintenance tax. Only justified if the original code encodes non-obvious routing logic you cannot reconstruct from the description.Compatibility. Assume Symfony 2.8 / PHP 5.6–7.0 as the design center. Verify against your actual runtime before any further investment — if composer require does not resolve, options 3 is closed and option 1 or 2 is the decision.
Sequencing.
Maintenance. Under option 2, you own a fork permanently: PHP 8 compatibility, AMQP client upgrades, Symfony-contract decoupling, security patches in transitive dependencies. That is an ongoing, non-amortizing cost with no upstream to rebase against. Under option 1, maintenance collapses into routine Laravel and RabbitMQ upgrades the team already performs.
Support. None. No maintainer, no issue tracker activity, no community. Every incident is a first-principles debugging exercise against unfamiliar code, likely by whoever is on call rather than whoever integrated it. Budget for that asymmetry.
Scaling. RabbitMQ scales well; this package's contribution to scaling is the risk. Expect static, config-file-defined topology — exchanges, queues, and bindings declared at container boot. That means topology changes require a deploy, no per-environment dynamic routing, and consumer prefetch/concurrency likely hardcoded rather than tunable at runtime. Horizontal consumer scaling is achievable but will require editing the package's worker configuration rather than adjusting environment variables.
Failure modes. The ones to design against, in rough order of severity:
Ramp-up. For the team, effectively zero transferable knowledge — no docs, no examples, no prior adopters to consult. For a new engineer inheriting a fork, expect 2–3 days to become productive in the code and considerably longer to become confident in its failure behavior. Contrast with the native Laravel approach, where ramp-up is bounded by the team's existing framework familiarity.
TPM recommendation. Decline adoption. Treat the repository as a design reference only: read it, extract the exchange/queue topology and routing semantics, and implement the equivalent on Laravel's native event and queue system. The package's core idea — async domain events over RabbitMQ — is sound and worth building; the artifact itself is a 2015-era Symfony bundle with no maintainer, no license clarity, and no modern PHP compatibility, and owning a fork of it is a worse trade than a two-day reimplementation.
How can I help you explore Laravel packages today?