Claude-skill-registry azure-service-bus

Enterprise messaging with Azure Service Bus. Configure queues, topics, subscriptions, and message processing. Use for async communication, event-driven architectures, and reliable message delivery on Azure.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/azure-service-bus" ~/.claude/skills/majiayu000-claude-skill-registry-azure-service-bus && rm -rf "$T"
manifest: skills/data/azure-service-bus/SKILL.md
source content

Azure Service Bus

Expert guidance for enterprise messaging on Azure.

Create Resources

# Create namespace
az servicebus namespace create \
  --name myservicebus \
  --resource-group myResourceGroup \
  --location eastus \
  --sku Standard

# Create queue
az servicebus queue create \
  --name orders \
  --namespace-name myservicebus \
  --resource-group myResourceGroup \
  --max-size 5120 \
  --default-message-time-to-live P14D

# Create topic
az servicebus topic create \
  --name events \
  --namespace-name myservicebus \
  --resource-group myResourceGroup

# Create subscription
az servicebus topic subscription create \
  --name processor \
  --topic-name events \
  --namespace-name myservicebus \
  --resource-group myResourceGroup

Python SDK

Connection

from azure.servicebus import ServiceBusClient, ServiceBusMessage
from azure.identity import DefaultAzureCredential

# Connection string
client = ServiceBusClient.from_connection_string(conn_str)

# Managed Identity
credential = DefaultAzureCredential()
client = ServiceBusClient(
    fully_qualified_namespace="myservicebus.servicebus.windows.net",
    credential=credential
)

Send Messages

from azure.servicebus import ServiceBusClient, ServiceBusMessage

with ServiceBusClient.from_connection_string(conn_str) as client:
    sender = client.get_queue_sender(queue_name="orders")

    with sender:
        # Single message
        message = ServiceBusMessage(
            body="Order data",
            application_properties={"order_id": "123"},
            subject="new-order"
        )
        sender.send_messages(message)

        # Batch messages
        batch = sender.create_message_batch()
        for i in range(10):
            batch.add_message(ServiceBusMessage(f"Message {i}"))
        sender.send_messages(batch)

Receive Messages

from azure.servicebus import ServiceBusClient, ServiceBusReceiveMode

with ServiceBusClient.from_connection_string(conn_str) as client:
    receiver = client.get_queue_receiver(
        queue_name="orders",
        receive_mode=ServiceBusReceiveMode.PEEK_LOCK
    )

    with receiver:
        # Receive batch
        messages = receiver.receive_messages(max_message_count=10, max_wait_time=5)

        for msg in messages:
            print(f"Received: {str(msg)}")
            print(f"Properties: {msg.application_properties}")

            # Complete message
            receiver.complete_message(msg)

            # Or dead-letter
            # receiver.dead_letter_message(msg, reason="Processing failed")

Async Processing

import asyncio
from azure.servicebus.aio import ServiceBusClient

async def process_messages():
    async with ServiceBusClient.from_connection_string(conn_str) as client:
        receiver = client.get_queue_receiver(queue_name="orders")

        async with receiver:
            async for msg in receiver:
                print(f"Received: {str(msg)}")
                await receiver.complete_message(msg)

asyncio.run(process_messages())

Topics and Subscriptions

# Send to topic
with ServiceBusClient.from_connection_string(conn_str) as client:
    sender = client.get_topic_sender(topic_name="events")

    with sender:
        message = ServiceBusMessage(
            body="Event data",
            subject="order.created"
        )
        sender.send_messages(message)

# Receive from subscription
with ServiceBusClient.from_connection_string(conn_str) as client:
    receiver = client.get_subscription_receiver(
        topic_name="events",
        subscription_name="processor"
    )

    with receiver:
        messages = receiver.receive_messages(max_message_count=10)
        for msg in messages:
            receiver.complete_message(msg)

.NET SDK

using Azure.Messaging.ServiceBus;

// Send
await using var client = new ServiceBusClient(connectionString);
ServiceBusSender sender = client.CreateSender("orders");

await sender.SendMessageAsync(new ServiceBusMessage("Order data"));

// Receive
ServiceBusReceiver receiver = client.CreateReceiver("orders");
ServiceBusReceivedMessage message = await receiver.ReceiveMessageAsync();
await receiver.CompleteMessageAsync(message);

// Processor
ServiceBusProcessor processor = client.CreateProcessor("orders");
processor.ProcessMessageAsync += async args =>
{
    Console.WriteLine($"Received: {args.Message.Body}");
    await args.CompleteMessageAsync(args.Message);
};
processor.ProcessErrorAsync += args =>
{
    Console.WriteLine($"Error: {args.Exception}");
    return Task.CompletedTask;
};

await processor.StartProcessingAsync();

Subscription Filters

# SQL filter
az servicebus topic subscription rule create \
  --name high-priority \
  --subscription-name processor \
  --topic-name events \
  --namespace-name myservicebus \
  --resource-group myResourceGroup \
  --filter-sql-expression "priority = 'high'"

# Correlation filter
az servicebus topic subscription rule create \
  --name order-events \
  --subscription-name orders \
  --topic-name events \
  --namespace-name myservicebus \
  --resource-group myResourceGroup \
  --correlation-filter subject=order.created

Sessions

# Send session messages
message = ServiceBusMessage(
    body="Session message",
    session_id="session-123"
)
sender.send_messages(message)

# Receive session messages
session_receiver = client.get_queue_receiver(
    queue_name="session-queue",
    session_id="session-123"
)

Dead Letter Queue

# Receive from DLQ
dlq_receiver = client.get_queue_receiver(
    queue_name="orders",
    sub_queue=ServiceBusSubQueue.DEAD_LETTER
)

with dlq_receiver:
    messages = dlq_receiver.receive_messages(max_message_count=10)
    for msg in messages:
        print(f"Dead letter reason: {msg.dead_letter_reason}")
        print(f"Body: {str(msg)}")

Bicep Deployment

resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' = {
  name: namespaceName
  location: location
  sku: {
    name: 'Standard'
    tier: 'Standard'
  }
}

resource queue 'Microsoft.ServiceBus/namespaces/queues@2022-10-01-preview' = {
  parent: serviceBusNamespace
  name: 'orders'
  properties: {
    maxSizeInMegabytes: 5120
    defaultMessageTimeToLive: 'P14D'
    deadLetteringOnMessageExpiration: true
    duplicateDetectionHistoryTimeWindow: 'PT10M'
    requiresSession: false
  }
}

resource topic 'Microsoft.ServiceBus/namespaces/topics@2022-10-01-preview' = {
  parent: serviceBusNamespace
  name: 'events'
  properties: {
    maxSizeInMegabytes: 5120
  }
}

Resources