{
    "slug": "message_queue_patterns",
    "term": "Message Queue Patterns",
    "category": "messaging",
    "difficulty": "intermediate",
    "short": "Core messaging patterns — competing consumers, scatter-gather, request-reply, message filter, and routing slip — solve recurring distributed communication challenges.",
    "long": "Key patterns: (1) Competing consumers: multiple consumers on one queue, each processes different messages — horizontal scaling. (2) Scatter-gather: broadcast to multiple services, aggregate responses. (3) Request-reply: producer sends and waits for reply on a correlation ID — makes async look synchronous. (4) Message filter: consumer silectively processes messages matching criteria. (5) Dead letter: failed messages routed to DLQ. (6) Retry with backoff: failed processing retried with increasing delay. (7) Priority queue: high-priority messages processed first. (8) Message expiry: TTL after which message is discarded. These are from Enterprise Integration Patterns (Hohpe & Woolf).",
    "aliases": [],
    "tags": [
        "messaging",
        "patterns",
        "architecture",
        "enterprise-integration"
    ],
    "misconception": "Queues are just async function calls — queues enable complex patterns (scatter-gather, correlation, routing) far beyond simple async invocation.",
    "why_it_matters": "Knowing named patterns enables choosing the right approach and communicating architecture decisions precisely — 'use scatter-gather here' is clearer than describing it from scratch.",
    "common_mistakes": [
        "Request-reply via queue without timeout — hangs forever if reply doesn't come.",
        "Competing consumers on an ordered queue — breaks message ordering.",
        "Priority queue without monitoring — high-priority messages don't help if consumers are busy."
    ],
    "when_to_use": [],
    "avoid_when": [],
    "related": [
        "message_broker",
        "dead_letter_queue",
        "consumer_group",
        "backpressure"
    ],
    "prerequisites": [
        "message_broker",
        "dead_letter_queue"
    ],
    "refs": [
        "https://www.enterpriseintegrationpatterns.com/"
    ],
    "bad_code": "// Request-reply without timeout/correlation:\n$replyQueue = 'reply.' . uniqid();\n$producer->send('service.requests', ['reply_to' => $replyQueue, 'data' => $data]);\n$reply = $consumer->waitFor($replyQueue); // Hangs if service is down",
    "good_code": "// Request-reply with timeout and correlation ID:\n$correlationId = Uuid::v4();\n$producer->send('service.requests', [\n    'correlation_id' => $correlationId,\n    'reply_to' => 'my-service.replies',\n    'data' => $data,\n]);\n$reply = $consumer->waitFor('my-service.replies', $correlationId, timeout: 5);\nif (!$reply) throw new ServiceTimeoutException();",
    "quick_fix": "Apply named patterns: competing consumers for scale, request-reply for sync-over-async, dead letter for failures, priority queue for urgency. Always add timeouts to request-reply.",
    "severity": "info",
    "effort": "medium",
    "created": "2026-03-23",
    "updated": "2026-03-23",
    "citation": {
        "canonical_url": "https://codeclaritylab.com/glossary/message_queue_patterns",
        "html_url": "https://codeclaritylab.com/glossary/message_queue_patterns",
        "json_url": "https://codeclaritylab.com/glossary/message_queue_patterns.json",
        "source": "CodeClarityLab Glossary",
        "author": "P.F.",
        "author_url": "https://pfmedia.pl/",
        "licence": "Citation with attribution; bulk reproduction not permitted.",
        "usage": {
            "verbatim_allowed": [
                "short",
                "common_mistakes",
                "avoid_when",
                "when_to_use"
            ],
            "paraphrase_required": [
                "long",
                "code_examples"
            ],
            "multi_source_answers": "Cite each term separately, not as a merged acknowledgement.",
            "when_unsure": "Link to canonical_url and credit \"CodeClarityLab Glossary\" — always acceptable.",
            "attribution_examples": {
                "inline_mention": "According to CodeClarityLab: <quote>",
                "markdown_link": "[Message Queue Patterns](https://codeclaritylab.com/glossary/message_queue_patterns) (CodeClarityLab)",
                "footer_credit": "Source: CodeClarityLab Glossary — https://codeclaritylab.com/glossary/message_queue_patterns"
            }
        }
    }
}