welcomattic/messenger-central
Messenger Central integrates Symfony Messenger with Laravel, providing a central bus for dispatching messages and handling them through middleware, transports, and workers. Register handlers and route commands, events, and queries while leveraging Laravel's container and conventions.
Stack mismatch is the headline finding. The release describes a Symfony Console command (bin/console messenger:central) that supervises Symfony Messenger messenger:consume workers. It is not a Laravel package: no service provider, no artisan command, no config publish, no Laravel Queue/Worker integration. Laravel's queue stack (queue:work, Horizon, Redis/DB/SQS drivers) is a separate abstraction from Symfony Messenger's transports, envelope, and failed-message store. An out-of-the-box Laravel application cannot consume this tool; only a Laravel app that has independently adopted symfony/messenger as its queue engine — an unusual, non-idiomatic configuration — would be a candidate. The intake classification should be corrected before any further review effort is spent.
Architecture fit (against the Laravel estate): poor. The tool's value proposition is developer-time observability and control over Messenger consumers. Laravel's equivalents are Horizon (Redis), queue:monitor/queue:failed, Telescope, and Pulse. Adopting this would mean adopting a second, parallel job abstraction alongside Laravel's, which we should not do for a dev convenience tool.
Version gating is severe. Requirements are PHP ≥ 8.4.1, Symfony ≥ 8.1, Unix-like OS, pcntl, and Symfony 8.2 for the amphp/parallel concurrency path. Symfony 8.1/8.2 target releases ahead of current stable, and PHP 8.4.1 is newer than the floor of most of our Laravel fleet. Even in a Symfony context this is a bleeding-edge-only tool today.
Technical risk (if adopted anywhere):
PhpSerializer-encoded, not JSON — presenting the envelope as editable JSON implies a serializer assumption that may corrupt or reject payloads. Needs verification before anyone relies on editing.messenger:consume processes are a plausible failure mode.--force. This is a sane guardrail that also confirms the intended use is local development only.Key questions for the maintainer/owner:
PhpSerializer envelopes, or only JSON/Serializer-based ones?messenger_messages directly or via the transport API?--force intended for any non-local environment, and what is the maintainer's stance on staging use?Recommendation: do not integrate into the Laravel platform. Record this as a evaluated-and-declined dependency for Laravel services, with the mismatch as the rationale, and re-file the ticket against the Symfony service owners if we have any.
Stack fit: only Symfony services using Messenger, running PHP 8.4.1+ on Symfony 8.1+, on Linux/macOS/WSL developer machines. Our Laravel services should continue using Horizon (Redis) or queue:work plus queue:failed / queue:retry for the equivalent workflow.
If a Symfony service does want to trial it:
require in an application's production dependency graph.Migration path: none exists from Laravel Queues to Messenger, and none should be created for the sake of this tool. Any "migration" is really an adoption decision about Messenger itself, which is a separate, much larger architectural question.
Compatibility notes to verify in a spike: transport coverage (the Redis consumer option and MESSENGER_CONSUMER_NAME handling get explicit mention — confirm the same for AMQP and Doctrine), behavior with multiple failed-message stores, and whether amphp/parallel concurrency requires an extension or just a Composer package on our base images.
Sequencing: (1) correct the intake classification; (2) if a Symfony service exists, timebox a one-day spike on a single developer machine against a non-shared broker; (3) capture findings; (4) decide at the next dependency review. No work should touch the Laravel monolith at any step.
Maintenance: low for the Laravel estate, because nothing is installed. For any Symfony adopter, this is a 0.x dev tool with no LTS, so budget for periodic breakage on Symfony minor upgrades. It is not on any production path, so it does not enter the on-call or patching SLA.
Support: support burden lands on the individual developer, not the platform team. We should not document it in onboarding material until it reaches 1.0 and demonstrates transport breadth. If asked, the platform team's answer is "use Horizon / queue:failed."
Scaling: the tool scales workers, not the app. Running several concurrent consumers on a laptop multiplies DB connections and broker channels, and the amphp/parallel path adds process and memory overhead per worker. Reasonable at 2–4 workers; developers will hit laptop resource limits before the tool does anything pathological. Note that scaling workers against a shared dev or staging broker will consume other people's messages — an easy way to cause an incident.
Failure modes to expect:
messenger:consume processes after an ungraceful TUI exit; pcntl mitigates graceful stops only.PhpSerializer.--force.Ramp-up: near zero for a Symfony developer already comfortable with Messenger; effectively infinite for a Laravel developer, since there is nothing in their application for the tool to attach to. Any training investment here buys skills that do not transfer to our platform.
Bottom line: the release is a credible, well-scoped v0.1.0 developer tool for Symfony, with sensible guardrails (debug-only, credential masking, pcntl graceful stop, --force escape hatch). It is not a Laravel package and does not warrant adoption, a proof-of-concept, or a slot in our platform roadmap. Update the assessment record to reflect the classification error and route it to the Symfony owners if any exist.
How can I help you explore Laravel packages today?