On this page
Operator manual

app:outbox:consume

Relay committed domain events, then committed notification delivery intents. Library directory events publish ingestion messages to Redis async; other events reach the durable notification and admin-alert listeners. Control's app:worker supervisor owns this relay. Use its logs and Background work to investigate a backlog before considering a separate manual pass.

Quick start

The Make examples below target the checkout's development preview. For an installed instance, use the dc function from Getting started and replace make exec cmd="php bin/console …" with dc exec app php bin/console ….

Process one batch of each queue and exit:

make exec cmd="php bin/console app:outbox:consume --once"

Options

Option Default Description
--once off Process one bounded batch of events and one of delivery intents, then exit
--time-limit 3600 Maximum run time in seconds, from 1 to 86400

Details

Without --once, the command repeats a pass every second until the time limit passes, it receives SIGTERM or SIGINT, or its memory use reaches 256 MiB. A signal lets the current pass finish before the command exits.

Live domain events are captured in the outbox. A library directory event becomes a FilesDiscovered message for ingestion; a lost relay acknowledgment can repeat that publication. Other replayed events use a private dispatcher for notification and admin-alert listeners; session and transcode listeners stay on the live dispatcher. For notification replay, the event receipt, notifications and channel delivery intents commit in one transaction. Replaying the same outbox ID skips an already committed notification receipt.

Committed delivery intents use the versioned JSON message contract and are handed to Redis async. A lost acknowledgement can repeat a handoff, so an email, push or webhook delivery is not guaranteed to happen exactly once.

A failure in one queue does not stop the other: the error is logged. Events and delivery intents use leased claims and retry backoff, reaching dead-letter state after five failed attempts. Records awaiting a retry stay eligible for a later pass once their delay has elapsed.

The health endpoints check the Redis consumer; they do not yet check this relay. The worker deployment owns its lifecycle; see Background work for drain and recovery procedures.

The producer runtime drill verifies that operator user creation, user registration and email verification commit domain writes and event capture in one transaction. Other event producers still need their transaction boundaries reviewed. See CQRS and Messaging and Testing for the mechanism and runtime coverage.

Exit codes

Code Meaning
0 The relay stopped normally, or the --once batch succeeded
1 With --once, a batch failed; the error is in the log
2 --time-limit is not a whole number from 1 to 86400