azure-service-bus

v2026.09.24

Azure Service Bus enterprise messaging service. Covers queues, topics, sessions, and transactions. Use for Azure-native enterprise messaging and hybrid cloud scenarios. USE WHEN: user mentions "azure service bus", "service bus queues", "service bus topics", "sessions", "azure messaging", asks about "azure queue", "managed identity", "subscription filters" DO NOT USE FOR: AWS-native - use `sqs`; GCP-native - use `google-pubsub`; event streaming - use Event Hubs or `kafka`; on-premise - use `rabbitmq` or `activemq`; lightweight - use `nats`

GitHub
Install command
npx skhub add claude-dev-suite/azure-service-bus
Markdown
SKILL.md

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

ConceptDescription
NamespaceContainer for messaging entities
QueuePoint-to-point messaging
TopicPublish-subscribe messaging
SubscriptionTopic consumer with filters
SessionOrdered message processing
Dead-letterFailed message destination

Tiers Comparison

FeatureBasicStandardPremium
QueuesYesYesYes
TopicsNoYesYes
SessionsNoYesYes
TransactionsNoYesYes
Max message size256KB256KB100MB
ThroughputSharedSharedDedicated

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

MetricAlert 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-PatternWhy It's BadSolution
Basic tier in productionNo topics, limited featuresUse Standard or Premium tier
No dead letter queueFailed messages lostEnable DLQ on all queues/subscriptions
Short lock durationDuplicate processingSet lock duration > processing time
No auto-delete on idleWasted resources and costSet auto-delete for temporary queues
Connection string everywhereSecurity riskUse Managed Identity
No batchingHigher latency and costBatch up to 10 messages
Peek-lock without completeMessages expire and reprocessAlways complete or abandon
Standard tier for orderingNo sessions availableUse Premium tier for sessions
Large message bodiesHigher costsUse claim check pattern with Blob Storage
No monitoringInvisible issuesEnable Azure Monitor metrics/alerts

Quick Troubleshooting

IssueLikely CauseFix
Messages not receivedWrong queue/topic name or permissionsVerify name and check RBAC/SAS
Duplicate messagesLock duration expiredIncrease lock duration or process faster
Messages in DLQMax delivery count exceededCheck processing logic, review DLQ
Access deniedMissing RBAC role or invalid SASAssign Sender/Receiver roles
Throttling errorsExceeded tier limitsUpgrade tier or reduce send rate
Lock lost exceptionProcessing time > lock durationRenew lock or increase duration
Session not availableNo sessions in queueEnable sessions on queue creation
Filter not workingWrong SQL filter syntaxTest filter, check message properties
Connection errorsNetwork issues or firewallCheck VNet, private endpoints, firewall
High costsToo many operationsUse 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

Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/messaging/azure-service-bus

Default branch

main

Latest commit

9496306

Tree SHA

fe4e2f1