azure-service-bus

Azure Service Bus Core Knowledge

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "azure-service-bus" with this command: npx skills add claude-dev-suite/claude-dev-suite/claude-dev-suite-claude-dev-suite-azure-service-bus

Azure Service Bus Core Knowledge

Full Reference: See advanced.md for Java/Python/C# producer patterns, Java processor consumer, session consumer, and Terraform security/monitoring configurations.

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: azure-service-bus for comprehensive documentation.

Quick Start (Local Emulator)

docker-compose.yml (Azure Service Bus Emulator - preview)

services: servicebus: image: mcr.microsoft.com/azure-messaging/servicebus-emulator:latest ports: - "5672:5672" environment: - ACCEPT_EULA=Y - SQL_SERVER=sqlserver depends_on: - sqlserver

sqlserver: image: mcr.microsoft.com/mssql/server:2022-latest environment: - ACCEPT_EULA=Y - SA_PASSWORD=YourStrong!Passw0rd

Azure CLI

az servicebus namespace create --name myservicebus --resource-group mygroup az servicebus queue create --namespace-name myservicebus --name orders az servicebus topic create --namespace-name myservicebus --name events az servicebus topic subscription create --namespace-name myservicebus
--topic-name events --name order-processor

Core Concepts

Concept Description

Namespace Container for messaging entities

Queue Point-to-point messaging

Topic Publish-subscribe messaging

Subscription Topic consumer with filters

Session Ordered message processing

Dead-letter Failed message destination

Tiers Comparison

Feature Basic Standard Premium

Queues Yes Yes Yes

Topics No Yes Yes

Sessions No Yes Yes

Transactions No Yes Yes

Max message size 256KB 256KB 100MB

Throughput Shared Shared Dedicated

Producer Pattern (Node.js)

import { ServiceBusClient } from '@azure/service-bus';

const client = new ServiceBusClient(connectionString); const sender = client.createSender('orders');

// Send single message await sender.sendMessages({ body: order, contentType: 'application/json', correlationId: correlationId, messageId: order.id, applicationProperties: { orderType: order.type, priority: order.priority, }, });

// Send batch const batch = await sender.createMessageBatch(); for (const order of orders) { if (!batch.tryAddMessage({ body: order, messageId: order.id })) { await sender.sendMessages(batch); batch = await sender.createMessageBatch(); batch.tryAddMessage({ body: order, messageId: order.id }); } } await sender.sendMessages(batch);

// Schedule message await sender.scheduleMessages( { body: order }, new Date(Date.now() + 60000) // 1 minute delay );

// Send to topic const topicSender = client.createSender('events'); await topicSender.sendMessages({ body: { type: 'OrderCreated', data: order }, subject: 'orders', // For subscription filtering correlationId: correlationId, });

await sender.close(); await client.close();

Consumer Pattern (Node.js)

const receiver = client.createReceiver('orders', { receiveMode: 'peekLock', maxAutoLockRenewalDurationInMs: 300000, });

// Process messages const messageHandler = async (message) => { try { const order = message.body; await processOrder(order); await receiver.completeMessage(message); } catch (error) { if (message.deliveryCount >= 3) { await receiver.deadLetterMessage(message, { deadLetterReason: 'MaxRetriesExceeded', deadLetterErrorDescription: error.message, }); } else { await receiver.abandonMessage(message); } } };

const errorHandler = async (error) => { console.error('Error:', error); };

receiver.subscribe({ processMessage: messageHandler, processError: errorHandler, });

// Subscription consumer with filter const subscriptionReceiver = client.createReceiver('events', 'order-processor');

// Session consumer (ordered processing) const sessionReceiver = await client.acceptSession('orders', 'session-1'); const messages = await sessionReceiver.receiveMessages(10); for (const msg of messages) { await processMessage(msg); await sessionReceiver.completeMessage(msg); }

// Dead letter consumer const dlqReceiver = client.createReceiver('orders', { subQueueType: 'deadLetter', });

Subscription Filters

SQL filter

az servicebus topic subscription rule create
--namespace-name myservicebus
--topic-name events
--subscription-name high-priority
--name priority-filter
--filter-sql-expression "priority > 5"

Correlation filter

az servicebus topic subscription rule create
--namespace-name myservicebus
--topic-name events
--subscription-name orders-only
--name order-filter
--correlation-filter subject=orders

// Create subscription with filter (SDK) const adminClient = new ServiceBusAdministrationClient(connectionString);

await adminClient.createSubscription('events', 'high-priority'); await adminClient.createRule('events', 'high-priority', 'priority-filter', { filter: { sqlExpression: "priority > 5", }, });

Production Readiness

Security Configuration

// Managed Identity import { DefaultAzureCredential } from '@azure/identity';

const client = new ServiceBusClient( 'myservicebus.servicebus.windows.net', new DefaultAzureCredential() );

// SAS Token const client = new ServiceBusClient(connectionString);

Monitoring Metrics

Metric Alert Threshold

ActiveMessages

10000

DeadletteredMessages

0

Size

80% of quota

ThrottledRequests

0

ServerErrors

0

Checklist

  • Managed Identity authentication

  • Private endpoints configured

  • Network rules (firewall)

  • Dead-letter queue handling

  • Auto-forwarding for routing

  • Duplicate detection enabled

  • Message TTL configured

  • Sessions for ordering (if needed)

  • Azure Monitor alerts

  • Diagnostic logs enabled

When NOT to Use This Skill

Use alternative messaging solutions when:

  • AWS-native architecture - SQS integrates better

  • GCP-native architecture - Use Google Pub/Sub

  • Event streaming with replay - Use Azure Event Hubs or Kafka

  • On-premise deployment - Use RabbitMQ or ActiveMQ

  • Multi-cloud strategy - Use Kafka or RabbitMQ

  • Simple pub/sub - Use Redis or NATS

  • Ultra-high throughput - Event Hubs or Kafka scale better

Anti-Patterns

Anti-Pattern Why It's Bad Solution

Basic tier in production No topics, limited features Use Standard or Premium tier

No dead letter queue Failed messages lost Enable DLQ on all queues/subscriptions

Short lock duration Duplicate processing Set lock duration > processing time

No auto-delete on idle Wasted resources and cost Set auto-delete for temporary queues

Connection string everywhere Security risk Use Managed Identity

No batching Higher latency and cost Batch up to 10 messages

Peek-lock without complete Messages expire and reprocess Always complete or abandon

Standard tier for ordering No sessions available Use Premium tier for sessions

Large message bodies Higher costs Use claim check pattern with Blob Storage

No monitoring Invisible issues Enable Azure Monitor metrics/alerts

Quick Troubleshooting

Issue Likely Cause Fix

Messages not received Wrong queue/topic name or permissions Verify name and check RBAC/SAS

Duplicate messages Lock duration expired Increase lock duration or process faster

Messages in DLQ Max delivery count exceeded Check processing logic, review DLQ

Access denied Missing RBAC role or invalid SAS Assign Sender/Receiver roles

Throttling errors Exceeded tier limits Upgrade tier or reduce send rate

Lock lost exception Processing time > lock duration Renew lock or increase duration

Session not available No sessions in queue Enable sessions on queue creation

Filter not working Wrong SQL filter syntax Test filter, check message properties

Connection errors Network issues or firewall Check VNet, private endpoints, firewall

High costs Too many operations Use batching, optimize polling

Reference Documentation

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: azure-service-bus for comprehensive documentation.

Available topics: basics , producers , consumers , production

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

cron-scheduling

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

token-optimization

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

webrtc

No summary provided by upstream source.

Repository SourceNeeds Review