symfonycasts/messenger-monitor-bundle
A Symfony bundle that adds a Telescope-style dashboard for Symfony Messenger, letting you inspect dispatched, handled, and failed messages, transports, and handler performance in real time, making it easier to debug async workflows and background jobs.
Architecture fit — low for a Laravel estate, high for a Symfony one. The single most important finding: this is a Symfony bundle, not a Laravel package. It plugs into Symfony's DI container, routing, security firewall, and Twig/EasyAdmin rendering pipeline. It provides an operator-facing UI over Symfony Messenger transports (queue depth, failed messages, manual retry/delete). For a Laravel-only codebase the fit is effectively zero — there is no supported path to mount it, and the effort to force it (embedding Symfony HttpKernel inside Laravel) is far greater than the value. If the organisation runs any Symfony services alongside Laravel, scope the evaluation to those services only.
Integration feasibility — high within the target runtime, near-zero outside it. Installation is a Composer require plus bundle registration, route import, and a firewall role. Expected effort for a Symfony service is under a day including review. The constraint is transport-level: message-level views (browse, retry, delete) depend on transports that expose their messages to the bundle — in practice the Doctrine DBAL/ORM transport reading messenger_messages. AMQP and Redis transports will likely surface counts and transport metadata but not individual message payloads, so the tool's core value degrades on non-Doctrine setups. This must be verified against our actual transport mix before committing.
Technical risk — moderate, concentrated in three areas:
access_control = data leak plus the ability to replay or destroy financial/transactional messages.Key questions to resolve before any commitment:
messenger_messages?Verdict: a legitimate, cheap convenience tool for Symfony shops; not a candidate for a Laravel-first platform. Treat it as an optional dev/staging operator aid, not as production monitoring infrastructure.
Stack fit. Segment the estate explicitly. For Symfony services running Messenger with the Doctrine transport, fit is good. For Laravel services, the correct analogues are Laravel Horizon (Redis queues), a thin internal UI over the failed_jobs table, or Laravel Pulse for queue health metrics. Do not attempt to bridge Symfony and Laravel here — the tool has no framework-agnostic core.
Migration path. There is no migration path from a Laravel queue dashboard to this bundle. For Symfony services there is likewise no data migration — it is a read-mostly view over existing tables, so onboarding and offboarding are both reversible in a single deploy. That reversibility is the main argument for a low-cost pilot.
Compatibility checklist.
Sequencing.
config/bundles.php under dev/test environments. One day plus review.messenger:failed:show, :retry, :remove) that remain the fallback.Maintenance. Small code footprint, MIT, no runtime dependency in the request path — low. The recurring cost is the EasyAdmin major-version bump, realistically one planned upgrade per year per adopting service. Pin the version in each service and treat the bundle as a leaf dependency that can be dropped without refactoring.
Support. Community-only, no vendor SLA, thin adopter base. Budget for the possibility that the project goes quiet. Mitigation is straightforward: the underlying operational need is already served by Symfony's built-in Messenger console commands, so a stalled upstream is an inconvenience, not an outage. Forking is viable given the MIT licence and small surface.
Scaling. This is an operator convenience tool, not a monitoring system. It emits no metrics and has no alerting, so it cannot substitute for real observability on queue depth, consumer lag, or failure rate — pair it with proper instrumentation. The listing views paginate but still issue count queries against messenger_messages; on tables with millions of retained rows those queries will be slow and can time out. Mitigate with indexes, aggressive retention/trimming, and a read replica if it is ever pointed at production data.
Failure modes to design around.
Ramp-up. Roughly half a day for a Symfony developer to install and configure; one to two days including the security review and runbook. For a Laravel team the ramp-up is the full onboarding cost of a second framework's admin stack, with no deliverable — which is the decisive argument against it in a Laravel-first organisation.
Recommendation. Do not adopt as platform tooling. Allow a time-boxed staging pilot on a single Symfony service if one exists, contingent on the security review, and treat it as an optional operator convenience layered on top of console commands. For Laravel services, close the underlying need with Pulse/Horizon or a small purpose-built failed-jobs view, and revisit only if the estate grows meaningful Symfony Messenger adoption.
How can I help you explore Laravel packages today?