Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Design asynchronous messaging patterns in Azure using Service Bus, Event Hubs, Event Grid, and Storage Queues. Use this skill when users ask for queueing, pub-sub, event streaming, retries, or decoupled system design. Covers delivery semantics, dead-lettering, idempotency, and monitoring.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Choose the right Azure messaging service and delivery semantics for reliable, decoupled, event-driven systems. Handle retries, failures, and exactly-once processing.
Immature: Synchronous API calls, no retries, tightly coupled
Developing: Simple queues created, basic retry logic
Managed: Service Bus/Event Hub with DLQ, idempotency, monitoring → Target
Optimized: Saga pattern for distributed transactions, stream processing, real-time analytics
What is the main use case?
├─ Simple queue (deferred processing) → Storage Queues (cheapest, simple)
├─ Enterprise queue (retries, DLQ, partitioning) → Service Bus Queue
├─ Publish-Subscribe (fan-out) → Service Bus Topic or Event Grid
├─ High-volume streaming (1000+ msg/sec) → Event Hubs
└─ Reactive events (webhooks, triggers) → Event Grid
What's the throughput target?
├─ <1000 msg/sec → Storage Queues or Service Bus
├─ 1000-10,000 msg/sec → Service Bus with partitions
├─ > 10,000 msg/sec → Event Hubs
└─ Needs low latency (<100ms) → Event Hubs or Service Bus Premium
Do you need ordering or exactly-once semantics?
├─ Yes, FIFO per partition → Event Hubs or Service Bus with sessions
├─ Yes, exactly-once → Service Bus with deduplication ID
└─ No, at-least-once acceptable → Any service + idempotency in handler
How many consumers need this message?
├─ One → Queue (Service Bus or Storage)
├─ Multiple (fan-out) → Service Bus Topic or Event Grid
└─ Streams (continuous analytics) → Event Hubs
| Service | Use Case | Throughput | Ordering | Features |
|---|---|---|---|---|
| Storage Queues | Simple, cheap | <2K msg/sec | No | TTL, visibility timeout |
| Service Bus Queue | Enterprise, retries | Up to 2K msg/sec | FIFO (sessions) | DLQ, dedup, TTL, auth |
| Service Bus Topic | Pub-Sub, fan-out | Up to 2K msg/sec | No | Subscriptions, filters |
| Event Hubs | Streaming, telemetry | 1M+ msg/sec | Per partition | Consumer groups, retention |
| Event Grid | Reactive, webhooks | Millions/sec | No | Built-in integrations |
Service Bus Queue (for command processing):
az servicebus queue create \
--namespace-name "sb-${app}-${env}" \
--resource-group $RG \
--name "order-processing" \
--max-delivery-count 10 \
--duplicate-detection-history-time-window "PT5M" \
--dead-letter-on-filter-evaluation-error \
--dead-letter-on-message-expiration
# Max retries: 10, then DLQ
# Dedup window: 5 minutes (for idempotency)
# Auto DLQ on TTL expiration
Service Bus Topic (for event distribution):
az servicebus topic create \
--namespace-name "sb-${app}-${env}" \
--resource-group $RG \
--name "order-events" \
--enable-subscriptions true
# Create subscription (consumer group)
az servicebus topic subscription create \
--namespace-name "sb-${app}-${env}" \
--resource-group $RG \
--topic-name "order-events" \
--name "email-service" \
--max-delivery-count 3 \
--dead-letter-on-filter-evaluation-error
# Different consumers listen on same topic via subscriptions
Event Hubs (for streaming):
az eventhubs eventhub create \
--namespace-name "eh-${app}-${env}" \
--resource-group $RG \
--name "telemetry" \
--partition-count 4 \
--message-retention 1 \
--enable-capture true \
--capture-interval-in-seconds 300 \
--capture-size-limit-in-bytes 314572800
# 4 partitions for 4 concurrent consumers
# Capture to storage every 5 minutes or 300MB
Produce to Service Bus Queue:
// .NET
var client = new ServiceBusClient(connectionString);
var sender = client.CreateSender("order-processing");
var message = new ServiceBusMessage("Order 123");
message.MessageId = "order-123"; // For deduplication
message.TimeToLive = TimeSpan.FromMinutes(5); // Auto-DLQ if not processed
message.ApplicationProperties["OrderId"] = "123";
await sender.SendMessageAsync(message);
Publish to Event Hub:
// .NET
var producer = new EventHubProducerClient(connectionString, "telemetry");
var batch = await producer.CreateBatchAsync();
batch.TryAdd(new EventData(new BinaryData("temperature=72.5")));
batch.TryAdd(new EventData(new BinaryData("humidity=45%")));
await producer.SendAsync(batch);
Consume with retry and DLQ:
// .NET
var client = new ServiceBusClient(connectionString);
var processor = client.CreateProcessor("order-processing");
processor.ProcessMessageAsync += async args => {
try {
var message = args.Message;
var orderId = message.ApplicationProperties["OrderId"];
// Idempotency check
if (await database.OrderProcessed(orderId)) {
await args.CompleteMessageAsync(message);
return;
}
// Process order
await ProcessOrder(orderId);
await args.CompleteMessageAsync(message);
} catch (Exception ex) {
// Retry automatically (up to max-delivery-count)
// After max retries, goes to DLQ
throw; // Nack, retry
}
};
processor.ProcessErrorAsync += args => {
Console.WriteLine($"Error: {args.Exception}");
return Task.CompletedTask;
};
await processor.StartProcessingAsync();
Monitor DLQ (failed messages):
# Peek at DLQ
az servicebus queue peek \
--namespace-name "sb-${app}-${env}" \
--resource-group $RG \
--name "order-processing/$DeadLetterQueue"
Deduplication ID (Service Bus):
Message A sent with MessageId="order-123"
├─ First delivery: Processed ✓
├─ Retry (within 5-min window): Not reprocessed (dedup)
└─ After 5 min: Can send again (different transaction)
Idempotency key in handler (Event Hub, Storage Queue):
# Python
def process_order(event):
order_id = event['OrderId']
# Check if already processed
if db.query(f"SELECT * FROM processed_orders WHERE order_id = {order_id}"):
return # Already done, idempotent
# Process
db.insert("orders", {"id": order_id, "status": "processing"})
# ... fulfill order ...
db.insert("processed_orders", {"order_id": order_id, "timestamp": now()})
Service Bus (sharding via topics/queues):
Instead of: Single queue "orders" (bottleneck at scale)
Use: 10 queues: "orders-0", "orders-1", ..., "orders-9"
Producer hashes order_id % 10 → routes to specific queue
Consumers: One per queue for parallelism
Event Hubs (partitions):
# 4 partitions = 4 independent streams
# Each consumer group member gets 1 partition
# Max throughput: ~1M events/sec with 32 partitions
# Each partition maintains ordering FIFO per session_id
Setup monitoring:
az monitor metrics list \
--resource-group $RG \
--resource-type "Microsoft.ServiceBus/namespaces" \
--resource-id "sb-${app}-${env}" \
--metric "ActiveMessageCount,DeadletteredMessageCount"
Alerts:
Messaging Architecture
Delivery & Ordering Design
Failure Handling
Configuration & Access
Operations Checklist
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate 2chat tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Ably tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Abstract tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Abuselpdb tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Abyssale tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。