administering-linux
Manage Linux systems covering systemd services, process management, filesystems, networking, performance tuning, and…
Async communication patterns using message brokers and task queues. Use when building event-driven systems, background job processing, or service decoupling. Covers Kafka (event streaming), RabbitMQ (complex routing), NATS (cloud-native), Redis Streams, Celery (Python), BullMQ
Claude Code
$ npx -y skills add ancoleman/ai-design-components --skill using-message-queues --agent claude-code
Codex
$ npx skills add ancoleman/ai-design-components --skill using-message-queues -a codex -y
Cursor
$ npx skills add ancoleman/ai-design-components --skill using-message-queues -a cursor -y
Gemini CLI
$ npx skills add ancoleman/ai-design-components --skill using-message-queues -a gemini-cli -y
GitHub Copilot
$ npx skills add ancoleman/ai-design-components --skill using-message-queues -a github-copilot -y
OpenCode
$ npx skills add ancoleman/ai-design-components --skill using-message-queues -a opencode -y
Windsurf
$ npx skills add ancoleman/ai-design-components --skill using-message-queues -a windsurf -y
name: using-message-queues description: Async communication patterns using message brokers and task queues. Use when building event-driven systems, background job processing, or service decoupling. Covers Kafka (event streaming), RabbitMQ (complex routing), NATS (cloud-native), Redis Streams, Celery (Python), BullMQ (TypeScript), Temporal (workflows), and event sourcing patterns.
Implement asynchronous communication patterns for event-driven architectures, background job processing, and service decoupling.
Use message queues when:
Choose message broker based on primary need:
**→ Apache Kafka**
**→ Task Queues**
**→ Temporal**
**→ NATS**
**→ RabbitMQ**
**→ Redis Streams**
| Broker | Throughput | Latency (p99) | Best For | |--------|-----------|---------------|----------| | **Kafka** | 500K-1M msg/s | 10-50ms | Event streaming | | **NATS JetStream** | 200K-400K msg/s | Sub-ms to 5ms | Cloud-native microservices | | **RabbitMQ** | 50K-100K msg/s | 5-20ms | Task queues, complex routing | | **Redis Streams** | 100K+ msg/s | Sub-ms | Simple queues, caching |
See `examples/kafka-python/` for working code.
from confluent_kafka import Producer, Consumer
# Producer
producer = Producer({'bootstrap.servers': 'localhost:9092'})
producer.produce('orders', key='order_123', value='{"status": "created"}')
producer.flush()
# Consumer
consumer = Consumer({
'bootstrap.servers': 'localhost:9092',
'group.id': 'order-processors',
'auto.offset.reset': 'earliest'
})
consumer.subscribe(['orders'])
while True:
msg = consumer.poll(1.0)
if msg is not None:
process_order(msg.value())See `examples/celery-image-processing/` for full implementation.
from celery import Celery
app = Celery('tasks', broker='redis://localhost:6379')
@app.task(bind=True, max_retries=3)
def process_image(self, image_url: str):
try:
result = expensive_image_processing(image_url)
return result
except RecoverableError as e:
raise self.retry(exc=e, countdown=60)See `examples/bullmq-webhook-processor/` for full implementation.
import { Queue, Worker } from 'bullmq'
const queue = new Queue('webhooks', {
connection: { host: 'localhost', port: 6379 }
})
// Enqueue job
await queue.add('send-webhook', {
url: 'https://example.com/webhook',
payload: { event: 'order.created' }
})
// Process jobs
const worker = new Worker('webhooks', async job => {
await fetch(job.data.url, {
method: 'POST',
body: JSON.stringify(job.data.payload)
})
}, { connection: { host: 'localhost', port: 6379 } })See `examples/temporal-order-saga/` for saga pattern implementation.
from temporalio import workflow, activity
from datetime import timedelta
@workflow.defn
class OrderSagaWorkflow:
@workflow.run
async def run(self, order_id: str) -> str:
# Step 1: Reserve inventory
inventory_id = await workflow.execute_activity(
reserve_inventory,
order_id,
start_to_close_timeout=timedelta(seconds=10),
)
# Step 2: Charge payment
payment_id = await workflow.execute_activity(
charge_payment,
order_id,
start_to_close_timeout=timedelta(seconds=30),
)
return f"Order {order_id} completed"Use: `Domain.Entity.Action.Version`
Examples:
{
"event_type": "order.created.v2",
"event_id": "uuid-here",
"timestamp": "2025-12-02T10:00:00Z",
"version": "2.0",
"data": {
"order_id": "ord_123",
"customer_id": "cus_456"
},
"metadata": {
"producer": "order-service",
"trace_id": "abc123",
"correlation_id": "xyz789"
}
}Route failed messages to dead letter queue (DLQ) after max retries:
@app.task(bind=True, max_retries=3)
def process_order(self, order_id: str):
try:
result = perform_processing(order_id)
return result
except UnrecoverableError as e:
send_to_dlq(order_id, str(e))
raise Reject(e, requeue=False)Comprehensive UI/UX and Backend component design skills for AI-assisted development with Claude
Manage Linux systems covering systemd services, process management, filesystems, networking, performance tuning, and…
Data pipelines, feature stores, and embedding generation for AI/ML systems. Use when building RAG pipelines, ML feature serving,…
Strategic guidance for designing modern data platforms, covering storage paradigms (data lake, warehouse, lakehouse), modeling…
Design cloud network architectures with VPC patterns, subnet strategies, zero trust principles, and hybrid connectivity. Use when…
Design comprehensive security architectures using defense-in-depth, zero trust principles, threat modeling (STRIDE, PASTA), and…
Assembles component outputs from AI Design Components skills into unified, production-ready component systems with validated…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.