handcraftedinthealps/redis-transport-bundle
A Symfony bundle that adds a Redis-based transport, letting you route messages through Redis instead of a traditional queue backend. It wires up the transport configuration and supporting services, making it straightforward to plug Redis into a messenger-style workflow with minimal setup in your app...
Headline finding: despite being scoped as a "Laravel/PHP package," this is a Symfony Messenger transport bundle, not a Laravel queue driver. It ships a Symfony TransportFactory, a DI extension, and services wired into the Symfony container. Laravel's queue subsystem (Illuminate\Queue) has a completely separate connector contract and a list-based Redis driver (LPUSH/BRPOP), not Redis Streams. This is a framework-category mismatch, not a version-compatibility issue.
Release delta — 1.2.2 (2025)
symfony/messenger ^6.4|^7.0 constraint makes the transport installable in both without pinning conflicts; (b) it is a second data point of responsive maintenance (external contributor PR merged, shipped in a patch bump).Architecture fit
Queue::extend). The bundle's Laravel-irrelevant parts (DI extension, Symfony config tree) are bypassed.XADD, XREADGROUP, XACK, XAUTOCLAIM, XPENDING, XGROUP, XLEN, XTRIM). A 300–500 LOC Laravel connector may be cheaper to own than adapting Symfony's abstractions.Integration feasibility
symfony/messenger as a transitive dependency inside a Laravel app — a large, opinionated component pulled in for one transport class.Queue::fake(), Horizon dashboards, and queue:retry/queue:failed tooling all assume Laravel-native payloads — expect these to break or need shims.Technical risk
XAUTOCLAIM reclaim loops, and stream trimming are now our runbooks, not the framework's.dispatch()->onQueue()) needs verification or replacement.Key questions
XREADGROUP BLOCK behave differently under cluster.Stack fit
RedisStreamsConnector implements Illuminate\Contracts\Queue\Queue, and register via Queue::extend('redis-streams', ...) in a service provider.block timeouts, and trimming policy, and must not share a connection with BRPOP-style blocking consumers.Migration path
Compatibility
job class key and version field; don't attempt to reuse Symfony's PHP serializer.XAUTOCLAIM; confirm against our managed Redis offering.Sequencing
Decision recommendation: unchanged. Treat this as a build-vs-adopt spike with a default of "adopt only if the Streams requirement is confirmed and the adapter stays under ~2 engineer-weeks." At 6 stars and 0 dependents, the package is a reference implementation, not a dependency. 1.2.2 makes adoption slightly safer by removing a Composer conflict on modern Laravel; it does not make it strategically different.
Maintenance
CHANGELOG of local patches, and re-evaluate quarterly against upstream activity.Support
Scaling
XREADGROUP with COUNT and BLOCK gives good batching; adding consumer groups supports independent consumer sets (a genuine advantage over Laravel lists).MAXLEN ~ (approximate) or MINID retention on every XADD, sized to peak-lag-plus-replay-window, and alert on XLEN.XINFO GROUPS: lag, pending, consumers) into our existing observability stack.Failure modes
XAUTOCLAIM with min-idle-time) — this is not optional and is the most common production failure.BLOCK values pin connections; workers must handle null reads and reconnect cleanly.Ramp-up
How can I help you explore Laravel packages today?