Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

parsec dlq

Inspect and operate on the sink dead-letter queue. Every parked item is a DLQItem carrying the failing sink name, the original message, the last error, and a retry count. The backend is sinks.MemoryDLQ (single-node) or sinks.RedisDLQ (Redis Streams, one stream per sink at parsec:dlq:<sink>).

Flags

FlagEnvDefault
--serverPARSEC_SERVERhttp://localhost:8000
--tokenPARSEC_TOKEN(empty — required)

dlq list

parsec dlq list <sink-name> --limit 50

Returns the newest items first. Each row carries:

FieldNotes
idOpaque DLQ identifier. Stable across replays.
sinkThe sink name (matches the Sinks registry key).
channelChannel the publication targeted.
recipientSink-specific recipient JSON (decoded via sinks.RecipientDecoder).
messageThe original parsec.Message.
last_errorMost recent error string.
attemptsNumber of retries before parking.
parked_atRFC3339 timestamp.

dlq count

parsec dlq count <sink-name>

Returns the total parked count for the named sink. Useful to wire into alerting — non-zero is the operator’s signal to investigate.

dlq discard

parsec dlq discard <id>

Permanently remove an item. The publication is lost; no further delivery attempt is made.

dlq replay

parsec dlq replay <id>

Re-enqueue the item through the original sink’s Retrier. The full retry policy runs again — if the underlying failure persists, the item returns to the DLQ with an incremented attempts count.

replay requires the sink to implement sinks.RecipientDecoder so the opaque recipient JSON can be rebuilt into the typed value. Built-in sinks (email / slack / webhook) all satisfy this; custom sinks must implement the interface or replay returns PARSEC_SINK_RECIPIENT_DECODE.

Operator runbook

See docs/src/ops/dlq.md for the failure-mode catalog, retention policy, and how to wire DLQ count into alerting.