ulabox/gearman-bundle
Symfony bundle that integrates Gearman into PHP applications, letting you configure job servers, register workers, and dispatch background jobs asynchronously. Adds service definitions, console commands, and event hooks for building scalable queue-based task processing.
Architecture fit. The first thing to flag is a category mismatch: ulabox/gearman-bundle is a Symfony bundle, not a Laravel package. Its value is Symfony-specific wiring — a DI extension, compiler passes, annotation/attribute-driven worker and job registration, and console commands that boot workers through the Symfony kernel. None of that transfers to Laravel's service container or console kernel without a shim layer, and a shim would discard most of what the bundle actually does. It is also a vendor fork (of the MMF GearmanBundle lineage) with 0 stars and 0 dependents, which reads as an internal fork published for convenience rather than a maintained distribution.
Integration feasibility. The bundle is a thin configuration layer over ext-gearman, the PECL extension that binds to libgearman. Real feasibility therefore depends on three external things, not on the package: (1) the PECL extension compiling and running on our target PHP version, (2) a gearmand broker we operate and monitor, and (3) a job topology (client/worker split, function-name registry) that we design ourselves. The bundle contributes the least risky part of that stack.
Technical risk.
doctrine/annotations usage) and Symfony 5+/6+ kernel API drift. Any fix becomes our fork to carry.ext-gearman has been in low-maintenance territory for years; building it against modern PHP and glibc is the single largest unknown. If it does not build, the package is moot.Key questions.
ext-gearman build against them today?Stack fit. Poor for a Laravel stack. Laravel already ships a queue abstraction with retries, backoff, dead-letter handling, batching, and Horizon observability; adopting Gearman means rebuilding those semantics on a raw client. If Gearman is non-negotiable (e.g., other services already speak it), the correct integration is to use \GearmanClient and \GearmanWorker directly behind a small Laravel-native adapter — a GearmanQueue driver implementing Illuminate\Contracts\Queue\Queue — and skip this bundle entirely. That keeps the queue contract, the failed-jobs table, and the supervisor tooling intact.
Migration path. Two distinct paths, and they should not be conflated:
gearmand, write the thin adapter above, and constrain Gearman to the cross-service boundary only — never as the internal job bus.Compatibility. Pin an explicit matrix before any code: PHP version, ext-gearman version, libgearman version, Symfony components (if the bundle is used at all), and doctrine/annotations vs. native attributes. Expect the annotation reader to be the first breakage on modern stacks.
Sequencing.
ext-gearman in a container matching production; run a trivial echo worker. This is a go/no-go gate — do not proceed past it.gearmand with persistent queue backing, health checks, and metrics.Maintenance. We inherit the fork. There is no upstream to rebase onto and no release cadence to track; every PHP minor bump becomes an audit of the bundle and the PECL extension. Budget recurring maintenance, not a one-time integration cost. The realistic steady state is "we own a small queue library nobody wanted to write."
Support. Zero community: no issues triage, no Stack Overflow corpus, no vendor. Troubleshooting falls to whoever wrote the adapter. Documentation is the repository README and Symfony's historical docs. This is a bus-factor-of-one situation unless we deliberately spread knowledge.
Scaling. gearmand scales horizontally for throughput but is operationally spiky: durable queues require a MySQL/Postgres backing store (the libdrizzle path), which adds a second stateful dependency. PHP workers are long-lived, blocking, and leak-prone — they need hard max_requests equivalents, memory ceilings, and supervisor restart policies. There is no native priority lane, rate limiting, or delayed-job primitive comparable to Laravel's; those become custom protocol on top of function-name conventions.
Failure modes. The ones to plan for explicitly:
gearmand restarts — the default configuration is not durable.gearmand down stops all async work with no framework-level fallback.ext-gearman takes down the worker with no PHP-level trace.Ramp-up. High relative to value. Engineers must learn three unfamiliar layers at once: the Gearman client/worker model, Symfony bundle configuration conventions inside a Laravel codebase, and the C extension's quirks. Compared to onboarding onto Laravel queues — which most PHP hires already know — this is weeks, not days, and the knowledge is non-transferable to the rest of the stack.
TPM recommendation. Gate on the extension spike first. Absent an existing organizational Gearman estate, the expected value here is negative: unmaintained code, a category mismatch against a Laravel stack, and operational semantics we would have to rebuild. Even in the legacy-interop case, the bundle itself is not the artifact to adopt — the raw client is.
How can I help you explore Laravel packages today?