Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Design message queue patterns for RabbitMQ, Kafka, SQS, Azure Service Bus with dead-letter queues, idempotency, ordering guarantees, and backpressure
.claude/skills/williamzujkowski-message-queue-pattern-designer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 14% | 0% |
Use this skill when:
Do not use for:
NOW_ET using NIST/time.gov semantics (America/New_York, ISO-8601).queue_system must be one of: rabbitmq, kafka, sqs, azure-servicebus, pubsubpattern must be one of: publish-subscribe, work-queue, request-reply, sagaguarantees must be one of: at-least-once, at-most-once, exactly-onceguarantees = exactly-once, verify target system supports it (Kafka, SQS FIFO, Azure Service Bus sessions)NOW_ET).Scope: Single queue/topic with default reliability; common 80% case.
num.partitions based on throughput and ordering scoperetention.ms (default 7 days)x-message-ttl and x-expires for queuesMessageRetentionPeriod (1 min to 14 days)DefaultMessageTimeToLivemessageRetentionDuration (default 7 days)Output: Minimal config + code for immediate deployment.
Scope: Production-grade reliability with error handling.
x-dead-letter-exchange on queueRedrivePolicy with maxReceiveCountDeadLetteringOnMessageExpiration and MaxDeliveryCountdeadLetterPolicy on subscriptionmessage-id or idempotency-key headerenable.idempotence=true + transactional producer (transactional.id)MessageDeduplicationId (5-minute dedup window)x-retry plugin or TTL + DLX loopNOW_ET):Output: Config + code with DLQ, idempotency, retry, and ordering.
Scope: High-throughput, multi-region, or regulated environments.
fetch.min.bytes, fetch.max.wait.ms to batch efficiently; monitor consumer lagprefetch_count to limit unacknowledged messages per consumerReceiveMessage returns emptyMaxConcurrentCalls on message receivermaxMessages, maxBytes)num.partitions; beyond that, add partitionsApproximateNumberOfMessages metricApproximateNumberOfMessagesVisible, ApproximateAgeOfOldestMessage)Output: Full architecture with scaling, monitoring, DR, and compliance.
guarantees = exactly-once and system does not support it: Warn user and downgrade to at-least-once with idempotency implementation.ordering_scope = global and throughput_estimate > 10k msg/sec: Suggest partition-key ordering to parallelize.pattern = saga and no compensation logic provided: Emit skeleton event handlers with TODO: implement compensation.queue_system, pattern, guarantees) is missing or invalid.typescript{ queue_config: { system: string, // e.g., "kafka" topology: { topics?: Array<{ name: string, partitions: number, replication_factor: number, config: Record<string, any> }>, queues?: Array<{ name: string, durable: boolean, dlq?: string, config: Record<string, any> }>, exchanges?: Array<{ // RabbitMQ name: string, type: string, bindings: Array<any> }> } }, producer_code: string, // Language-agnostic or specified language consumer_code: string, // Includes error handling, retries, idempotency monitoring: { metrics: Array<string>, // e.g., ["consumer_lag", "dlq_depth"] alerts: Array<{ condition: string, threshold: number, action: string }> }, sources: Array<{ title: string, url: string, accessed: string // ISO-8601 timestamp = NOW_ET }> }
Required fields:
queue_config.systemqueue_config.topology (non-empty)producer_codeconsumer_codemonitoring.metrics (≥2)sources (≥2 for T2+)Input:
yamlqueue_system: kafka pattern: publish-subscribe guarantees: exactly-once throughput_estimate: 50k msg/sec ordering_scope: partition-key
Output (Kafka Topic Config with Partitioning):
json{ "queue_config": { "system": "kafka", "topology": { "topics": [{ "name": "orders.events", "partitions": 12, "replication_factor": 3, "config": { "min.insync.replicas": 2, "retention.ms": 604800000, "compression.type": "snappy" } }] } }, "producer_code": "props.put(\"enable.idempotence\", true);\nprops.put(\"transactional.id\", \"order-producer-1\");\nProducerRecord<String, Order> record = new ProducerRecord<>(\"orders.events\", order.getCustomerId(), order);", "consumer_code": "props.put(\"isolation.level\", \"read_committed\");\nconsumer.subscribe(\"orders.events\");\nwhile(true) {\n records = consumer.poll(100);\n for (record : records) {\n processOrder(record.value());\n }\n consumer.commitSync();\n}", "monitoring": { "metrics": ["consumer_lag", "partition_throughput"], "alerts": [{"condition": "lag > 10000", "threshold": 10000, "action": "scale_consumers"}] } }
NOW_ET| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 21,112 | 9,863 | -53% | 1 | 1 | 0% | 4,956 | 6,060 | +22% | 0 | 0 | — |
case-02 | fail→pass | 18,081 | 12,613 | -30% | 1 | 1 | 0% | 4,245 | 6,718 | +58% | 0 | 0 | — |
case-03 | fail→pass | 19,291 | 14,470 | -25% | 1 | 1 | 0% | 4,146 | 6,975 | +68% | 0 | 0 | — |
case-04 | fail→pass | 13,301 | 6,170 | -54% | 1 | 1 | 0% | 3,113 | 4,710 | +51% | 0 | 0 | — |
case-05 | fail→fail | 11,044 | 9,890 | -10% | 1 | 1 | 0% | 2,523 | 6,007 | +138% | 0 | 0 | — |
case-06 | fail→pass | 22,251 | 11,600 | -48% | 1 | 1 | 0% | 4,980 | 5,674 | +14% | 0 | 0 | — |
case-07 | pass→pass | 16,695 | 11,439 | -31% | 1 | 1 | 0% | 3,513 | 6,182 | +76% | 0 | 0 | — |
case-13 | pass→pass | 13,363 | 9,578 | -28% | 1 | 1 | 0% | 3,272 | 5,928 | +81% | 0 | 0 | — |
case-08 | fail→pass | 13,823 | 12,890 | -7% | 1 | 1 | 0% | 2,910 | 6,456 | +122% | 0 | 0 | — |
case-09 | fail→pass | 13,308 | 8,673 | -35% | 1 | 1 | 0% | 3,410 | 5,766 | +69% | 0 | 0 | — |
case-10 | fail→fail | 20,636 | 15,759 | -24% | 1 | 1 | 0% | 4,809 | 7,173 | +49% | 0 | 0 | — |
case-11 | fail→fail | 12,053 | 8,003 | -34% | 1 | 1 | 0% | 2,716 | 5,523 | +103% | 0 | 0 | — |
case-12 | pass→pass | 11,666 | 12,287 | +5% | 1 | 1 | 0% | 2,602 | 6,846 | +163% | 0 | 0 | — |
case-14 | pass→pass | 13,609 | 14,370 | +6% | 1 | 1 | 0% | 2,921 | 6,616 | +126% | 0 | 0 | — |
case-15 | pass→pass | 14,117 | 11,564 | -18% | 1 | 1 | 0% | 3,056 | 6,155 | +101% | 0 | 0 | — |
case-16 | pass→pass | 19,982 | 11,793 | -41% | 1 | 1 | 0% | 4,134 | 5,983 | +45% | 0 | 0 | — |
case-17 | fail→pass | 20,120 | 8,991 | -55% | 1 | 1 | 0% | 4,323 | 5,571 | +29% | 0 | 0 | — |
case-18 | pass→pass | 11,064 | 7,716 | -30% | 1 | 1 | 0% | 2,511 | 5,444 | +117% | 0 | 0 | — |
case-19 | pass→pass | 12,007 | 10,654 | -11% | 1 | 1 | 0% | 2,795 | 6,112 | +119% | 0 | 0 | — |
case-20 | pass→pass | 17,251 | 10,149 | -41% | 1 | 1 | 0% | 4,033 | 6,007 | +49% | 0 | 0 | — |
case-21 | fail→pass | 21,627 | 9,519 | -56% | 1 | 1 | 0% | 5,165 | 5,743 | +11% | 0 | 0 | — |
case-22 | fail→pass | 15,070 | 7,483 | -50% | 1 | 1 | 0% | 3,215 | 5,380 | +67% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.