Catalogue / Messaging

Queue

Point-to-point message queue. Each message is processed by one consumer.

Category
Messaging
Properties
11
Components
24
Rules
3
Properties · 11 defined by this kind

A node of this kind resolves each property from its own props, then the component's defaults, then the default below.

propertytypevaluesrequireddefault
backoffenumnone | fixed | exponential | exponential-jitterno—
deadLetterQueueboolean—nofalse
deliveryenumat-most-once | at-least-once | exactly-onceyes—
instancesinteger—no—
managedboolean—nofalse
maxAttemptsinteger—no—
orderingenumnone | per-key | globalnonone
persistenceboolean—notrue
replayboolean—nofalse
retentionDaysinteger—no—
roleenumwork | dlq | retry | offline-mailbox | frontiernowork
Rules for this kind · 3
queue-missing-dlq

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.

  • — all of these hold:
  • — the node's `deadLetterQueue` is false
  • — the node has at least one asynchronous incoming edge
retry-queue-without-dlq

A retry queue is where poison messages end up. With no dead-letter queue they are retried forever or dropped in silence, and nobody ever looks at the failed payment.

  • — all of these hold:
  • — the node's `role` is "retry"
  • — the node's `deadLetterQueue` is false
retry-without-backoff

Retrying a transient failure at full speed turns one slow dependency into a retry storm. A retry queue backs off, preferably exponentially and with jitter.

  • — all of these hold:
  • — the node's `role` is "retry"
  • — any of these hold:
  • — the node's `backoff` has no value
  • — the node's `backoff` is "none"
Components · 24
Source
# yaml-language-server: $schema=../schema/kind.schema.json
# Point-to-point message queue. Each message is consumed by one consumer.
# role distinguishes work queues from dead-letter, retry, offline-mailbox and crawl-frontier uses.
# deadLetterQueue and backoff are deliberately optional so rules can catch their absence.
schemaVersion: "1"
type: "kind"
id: "queue"
category: "messaging"
properties:
  delivery:
    type: "enum"
    values: ["at-most-once", "at-least-once", "exactly-once"]
    required: true
  ordering:
    type: "enum"
    values: ["none", "per-key", "global"]
    default: "none"
  deadLetterQueue:
    type: "boolean"
    default: false
  replay:
    type: "boolean"
    default: false
  retentionDays:
    type: "integer"
  role:
    type: "enum"
    values: ["work", "dlq", "retry", "offline-mailbox", "frontier"]
    default: "work"
  persistence:
    type: "boolean"
    default: true
  backoff:
    type: "enum"
    values: ["none", "fixed", "exponential", "exponential-jitter"]
  maxAttempts:
    type: "integer"
  instances:
    type: "integer"
  managed:
    type: "boolean"
    default: false

The same page as markdown, for an agent: /catalogue/kinds/queue.md