Jonatas Silva

Workers, Queues & Dead Letter Queue

BullMQ-backed async architecture. Six dedicated queues, per-job retries with backoff, and a dead-letter-queue for forensic recovery.

6 queues 6 in DLQ

Queue health

Live BullMQ queue counters and processing metrics.

content-generation-queue

Claude/Gemini draft generation jobs

×8

12

Wait

6

Active

18,402

Done

142

Fail

3

Delay

14.2s avg 318 retries24/min

Last failure: Claude 429 rate_limit_exceeded

legal-research-queue

Perplexity + CourtListener research jobs

×6

4

Wait

3

Active

22,117

Done

64

Fail

1

Delay

8.9s avg 121 retries31/min

Last failure: CourtListener 503 service_unavailable

compliance-review-queue

Gemini jurisdiction compliance evaluations

×4

2

Wait

2

Active

16,980

Done

28

Fail

0

Delay

6.4s avg 47 retries19/min

Last failure: Schema validation failed: missing disclaimer

wordpress-publishing-queue

WordPress REST API publishing jobs

×10

7

Wait

4

Active

14,233

Done

211

Fail

9

Delay

3.1s avg 502 retries42/min

Last failure: WordPress API timeout (30s)

billing-metering-queue

Token usage + Stripe usage record events

×12

0

Wait

1

Active

88,902

Done

9

Fail

0

Delay

410ms avg 14 retries96/min

Last failure: Stripe idempotency key conflict

audit-log-queue

Immutable hash-chained audit writes

×16

0

Wait

0

Active

142,771

Done

0

Fail

0

Delay

120ms avg 0 retries130/min

Dead Letter Queue

Jobs that exhausted retries. Payload and stacktrace preserved for triage and replay.

6 awaiting triage
ETIMEDOUTwordpress-publishing-queuepublishPost

WordPress API timeout

Morgan Trial Attorneys·attempts 5/5·20h ago
RATE_LIMIT_429content-generation-queuegenerateDraft

Claude rate limit exceeded

Hamilton & Reed LLP·attempts 3/3·21h ago
HTTP_503legal-research-queueverifyCitations

CourtListener unavailable

Silva & Partners Legal·attempts 4/4·21h ago
STRIPE_SIG_INVALIDbilling-metering-queuerecordUsage

Stripe webhook signature mismatch

Westbridge Legal Group·attempts 2/3·23h ago
TOKEN_BUDGET_EXCEEDEDcontent-generation-queuegenerateDraft

Tenant token limit exceeded

Morgan Trial Attorneys·attempts 1/3·23h ago
COMPLIANCE_BLOCKEDcompliance-review-queuecomplianceReview

State compliance block

Westbridge Legal Group·attempts 1/1·1d ago

Why BullMQ instead of N8N

Replacing fragmented visual workflows with code-owned, observable workers.

N8N (fragmented)

Versioning

JSON workflows hard to diff & review in PRs

Retry control

Coarse, node-level, no per-job backoff strategy

Observability

Limited; no per-job tokens/cost/trace correlation

Operational coupling

Separate runtime + UI to babysit and scale

Tenant isolation

Hard to enforce; shared execution context

BullMQ (native workers)

Programmatic retry

Per-job attempts, exponential backoff, jitter

Dead Letter Queue

Failed jobs preserved with payload + stacktrace

Per-job metrics

Latency, tokens, cost attributed to tenant

Observability

Job ↔ AI trace correlation via traceId

Transactional control

Atomic usage metering + audit writes

Governance

Code-reviewed job contracts, typed payloads