The dead-letter-as-a-mirror point is spot on. Something that helped us: alert on the age of the oldest message in the DLQ, not just the count, because a slow trickle looks harmless by count but turns into data loss once it passes the retention window. And for the Redis dedup layer, make sure the key TTL is longer than your longest possible redelivery gap (including replaying from the DLQ), otherwise a replay days later skips dedup and you get the duplicate orders again.