20251020 azure service bus mensajeria
Resumen
Azure Service Bus es el servicio de mensajería empresarial de Azure. Permite desacoplar aplicaciones y servicios mediante colas y topics, ideal para arquitecturas distribuidas y microservicios. Este post va directo a admins y DevOps que necesitan integrar sistemas de forma fiable y segura.
¿Qué es Azure Service Bus?
Azure Service Bus es un servicio PaaS de mensajería que ofrece: - Colas (Queues) para comunicación punto a punto - Topics y subscriptions para pub/sub - Entrega garantizada y ordenada - Soporte para mensajes transaccionales y sesiones - Integración con RBAC y Managed Identities
Arquitectura / Cómo funciona
flowchart LR
App1[Productor] -- Envia mensaje --> SB[Service Bus Queue]
SB -- Recibe mensaje --> App2[Consumidor]
SB -. Dead-letter .-> DLQ[Dead Letter Queue]
- El productor envía mensajes a la cola
- El consumidor los procesa de forma asíncrona
- Mensajes fallidos van a la Dead Letter Queue
Uso práctico: crear y usar una cola
1. Crear un Service Bus Namespace y una cola
# Variables
RESOURCE_GROUP="my-rg"
LOCATION="westeurope"
SB_NAMESPACE="my-sb-namespace"
QUEUE="myqueue"
# Crear namespace
az servicebus namespace create \
--resource-group $RESOURCE_GROUP \
--name $SB_NAMESPACE \
--location $LOCATION
# Crear cola
az servicebus queue create \
--resource-group $RESOURCE_GROUP \
--namespace-name $SB_NAMESPACE \
--name $QUEUE
2. Enviar y recibir mensajes (Python, passwordless recomendado)
import asyncio
from azure.servicebus.aio import ServiceBusClient
from azure.servicebus import ServiceBusMessage
from azure.identity.aio import DefaultAzureCredential
FULLY_QUALIFIED_NAMESPACE = "<namespace>.servicebus.windows.net"
QUEUE_NAME = "myqueue"
async def send_message():
credential = DefaultAzureCredential()
async with ServiceBusClient(FULLY_QUALIFIED_NAMESPACE, credential) as client:
sender = client.get_queue_sender(QUEUE_NAME)
async with sender:
msg = ServiceBusMessage("Hola Azure Service Bus!")
await sender.send_messages(msg)
await credential.close()
async def receive_message():
credential = DefaultAzureCredential()
async with ServiceBusClient(FULLY_QUALIFIED_NAMESPACE, credential) as client:
receiver = client.get_queue_receiver(QUEUE_NAME)
async with receiver:
async for msg in receiver:
print("Mensaje recibido:", str(msg))
await receiver.complete_message(msg)
await credential.close()
# Ejecutar
asyncio.run(send_message())
asyncio.run(receive_message())
Más detalles y ejemplos oficiales: - Quickstart: Python passwordless - Service Bus security baseline - Dead-letter queues
Buenas prácticas / Seguridad
- Usa Managed Identities en vez de connection strings
- Activa el cifrado con claves gestionadas por el cliente (CMK) si es necesario
- Configura reglas de red y firewall
- Usa colas de dead-letter para mensajes no procesables
- Monitoriza con Azure Monitor y alertas