Failed messages and the outbox
A message that exhausts its three retries is moved to the failed transport
(doctrine://default?queue_name=failed) rather than dropped. Nothing surfaces
that automatically, so check it when mail or exports go missing:
bin/console messenger:failed:show # list parked messagesbin/console messenger:failed:show <id> -vv # full detail, including the errorbin/console messenger:failed:retry # re-queue them, interactively/admin/status shows the current count, so you know whether it is worth
looking.
The site-review outbox
Every event bound for an agent is recorded in an outbox before its Mercure update is published, so a hub restart or an unreachable hub loses nothing permanently. Each row carries the type of the producer that wrote it. Events whose publish never landed are visible in two places:
/admin/outbox— every undelivered event on the instance, with its type, attempt counts and next-retry times.ROLE_ADMIN./projects/<id>/outbox— the same, scoped to one project, for whoever can view that project. The project sidebar links to it as Outbox.
The worker retries them every five minutes on the scheduler. To force a pass — typically after an instance whose worker was down — run:
bin/console app:drain-outbox # or --limit=<n>It is safe to run alongside the worker; the claim is atomic.