kch/rabbitmq-bundle
kch/rabbitmq-bundle integrates RabbitMQ messaging into PHP applications, with configuration for broker connections and straightforward publishing and consuming of messages. A practical choice for adding asynchronous, queue-based processing to Symfony projects.
Architecture fit — the premise is wrong before the code is read. This is a Symfony bundle, not a Laravel package. It ships a Bundle subclass, a DependencyInjection\Extension that builds a configuration tree, and compiler passes that wire tagged producer/consumer services into the container. Laravel has no bundle/extension concept, so the package cannot be composer required into a Laravel app and "just work" — there is no service provider, no facade, no config publish tag, and no queue driver. Any Laravel integration would mean writing a bespoke bridge that reimplements the bundle's container wiring inside a ServiceProvider, at which point the bundle is contributing nothing but an abandoned config schema. Even in a Symfony app the fit is dated: the bundle targets Symfony 3.x/4.x-era conventions (XML/YAML service definitions, annotation-driven @RabbitMqConsumer, PHP 7.1–7.2), not attributes, autoconfiguration, or the modern AbstractBundle pattern.
Integration feasibility — effectively zero as distributed. Composer constraints will collide with any current project: the 2018 release line pins php-amqplib 2.x and Symfony 3/4 components. On PHP 8.2+ and Symfony 6/7 the transitive constraints fail resolution, and even with --ignore-platform-reqs you inherit PHP 7 fatal signatures (Serializable, dynamic properties, each()-era helpers). There is no lockfile-compatible path without forking the fork. The underlying transport (php-amqplib) is fine and maintained — but you do not need this package to use it.
Technical risk — high, and concentrated in the wrong places.
| Risk | Severity | Note |
|---|---|---|
| Abandonment | Critical | Last release 2018-06-15; ~7 years of upstream drift |
| Supply chain / provenance | High | 1 star, 0 dependents, vendor namespace is a payday-loan company's internal fork — no external review, no security policy, no CVE feed |
| Runtime compatibility | Critical | No PHP 8.x support; blocks platform upgrades indefinitely |
| Maintenance inheritance | High | Fork of oldsound/rabbitmq-bundle, itself superseded by php-amqplib/rabbitmq-bundle; bugfixes land upstream, never here |
| Behavioral debt | Medium | Legacy connection/reconnect semantics, no health checks, no observability hooks |
The score of 0.005 is not noise — it is the correct signal. A single-maintainer, unmaintained fork with zero downstream consumers means no one else is exercising these code paths in production, so you become the de facto maintainer on day one.
Key questions for the requestor.
reply_to, delayed messages, or dead-letter routing? Each maps to a different (maintained) package.Recommendation: reject for adoption. Do not spend discovery time on a proof of concept; the compatibility ceiling is decisive and the maintenance posture is unrecoverable.
Stack fit. Assume the requestor means Laravel (per the brief) — the correct answer is to drop this package and use vladimir-yuldashev/laravel-queue-rabbitmq, which is a first-class Laravel queue driver with a service provider, config publishing, Horizon-adjacent semantics, and active maintenance on current PHP/Laravel versions. If the stack is genuinely Symfony, use php-amqplib/rabbitmq-bundle — the maintained successor to the same codebase lineage, with attribute-based consumers and Symfony 6/7 support. In neither case does kch/rabbitmq-bundle belong in the dependency graph.
Migration path (from this package, if already present). Treat it as a rename-and-rewire, not a lift-and-shift:
old_sound_rabbit_mq → rabbitmq).multiple/qos blocks are broadly analogous but option names drift.@RabbitMqConsumer/@RabbitMqProducer annotations to attributes (Symfony) or to Job/Queueable classes (Laravel).Compatibility. Pin the replacement against your PHP and framework matrix explicitly and add a CI job that runs Composer resolution on the minimum and maximum supported versions. Add a composer audit gate plus Dependabot/Renovate — the failure mode you are avoiding is discovering a dead dependency two years later during an unrelated PHP upgrade.
Sequencing. (1) Confirm stack and messaging requirements. (2) Spike the replacement package against a disposable vhost with a real publish/consume round trip, including a poison message and a dead-letter route. (3) Land the driver swap behind a feature flag with dual-publish if message loss is unacceptable. (4) Cut consumers over per-queue, oldest-risk-last, with a soak window. (5) Remove the old dependency and its config in a separate, revertable PR. Budget roughly 1–2 weeks for a small team; the broker-side work, not the code, is the long pole.
Maintenance. Adopting this package transfers upstream maintenance onto your team permanently: PHP 8 compatibility patches, php-amqplib major-version bumps, Symfony/Laravel deprecation cleanup, and any CVE in the AMQP client or its transitive tree. There is no release cadence to ride and no issue tracker where your bug reports will be triaged. This is the single largest hidden cost and it does not appear in any estimate that only counts integration hours.
Support. No vendor, no SLA, no security advisory channel, no community of practice — one star and zero dependents means no Stack Overflow corpus and no blog posts for the failure modes you will hit. Internal escalation becomes "read the fork's source and diff it against upstream." On-call engineers will be debugging code no living maintainer has touched since 2018.
Scaling. The transport itself scales fine — RabbitMQ is not the constraint. The constraints are in the bundle's ergonomics: connection setup and heartbeat tuning are manual and undocumented here, prefetch/QoS defaults are opinionated and easy to get wrong under load, and there is no built-in consumer supervision. You will need process managers (Supervisor/systemd), explicit pcntl-safe memory budgets for long-running consumers, and a plan for consumer crash-loops that do not poison the queue.
Failure modes to plan for explicitly.
requeue on a poison message creates an infinite hot loop; requires DLX policies defined at the broker, not the bundle.php-amqplib heartbeat handling; expect stale-channel errors after broker failover or idle timeouts.Ramp-up. Near-zero for the bundle's happy path (it is a thin wrapper), but the real learning curve is RabbitMQ operations — exchanges, bindings, DLX, QoS, and HA policies — which the package does not teach and the documentation does not cover. Assume 2–3 weeks before an engineer is independently safe in production, and pair that with broker-side runbooks (queue depth alerts, DLX drain procedure, replay tooling) that no package will give you.
How can I help you explore Laravel packages today?