---
id: "queue-missing-dlq"
type: "rule"
severity: "error"
url: "https://localhost:3000/catalogue/rules/queue-missing-dlq"
---

# Queue without dead-letter queue

| | |
|---|---|
| Severity | error |
| Selects | every node of kind queue |
| Components in scope | 24 |

## Why

A queue that receives asynchronous traffic and has no dead-letter queue either drops poison messages or retries them forever. Neither outcome leaves anything for a human to investigate.

## What it checks

It looks at every node of kind queue, and fires when:

- all of these hold:
  - the node's `deadLetterQueue` is false
  - the node has at least one asynchronous incoming edge

Message template:

```
Queue '{{node.id}}' receives async traffic but has no dead-letter queue.
```

## Applies to

- [Queue](https://localhost:3000/catalogue/kinds/queue.md) `queue`

24 catalogue components fall under it.

## Tripped by

Reference designs whose broken twin names this rule in its header:

- [amazon-order](https://localhost:3000/d/zeema/amazon-order)
- [canva-uploads](https://localhost:3000/d/zeema/canva-uploads)
- [duolingo-backend](https://localhost:3000/d/zeema/duolingo-backend)
- [facebook-messenger](https://localhost:3000/d/zeema/facebook-messenger)
- [github-mysql](https://localhost:3000/d/zeema/github-mysql)
- [gitlab-architecture](https://localhost:3000/d/zeema/gitlab-architecture)
- [gojek-platform](https://localhost:3000/d/zeema/gojek-platform)
- [google-maps](https://localhost:3000/d/zeema/google-maps)
- [instagram-feed](https://localhost:3000/d/zeema/instagram-feed)
- [monzo-platform](https://localhost:3000/d/zeema/monzo-platform)
- [order-processing](https://localhost:3000/d/zeema/order-processing)
- [payment-system](https://localhost:3000/d/zeema/payment-system)
- [pinterest-feed](https://localhost:3000/d/zeema/pinterest-feed)
- [reddit-feed](https://localhost:3000/d/zeema/reddit-feed)
- [shopify-flash-sale](https://localhost:3000/d/zeema/shopify-flash-sale)
- [whatsapp-messaging](https://localhost:3000/d/zeema/whatsapp-messaging)
- [youtube-upload-playback](https://localhost:3000/d/zeema/youtube-upload-playback)

## Source (`rule` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/rule.schema.json
# A queue that receives asynchronous traffic and has no dead-letter queue drops or
# infinitely retries poison messages. Tripped by designs/order-processing.broken.yaml.
schemaVersion: "1"
type: "rule"
id: "queue-missing-dlq"
severity: "error"
select:
  node:
    kind: "queue"
when:
  all:
    - prop: "deadLetterQueue"
      equals: false
    - hasEdge:
        direction: "in"
        mode: "async"
message: "Queue '{{node.id}}' receives async traffic but has no dead-letter queue."
```

Human page: https://localhost:3000/catalogue/rules/queue-missing-dlq
