Azure Service Bus para mensagens desacopladas
Crie um namespace do Service Bus com filas e tópicos, envie e receba mensagens de uma aplicação e configure filas de mensagens não entregues para tratar mensagens com falha.
Azure Service Bus para mensagens desacopladas é uma aula grátis de Azure Fundamentals no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Azure Fundamentals, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Azure Fundamentals inclui 4 aulas no total.
Por que desacoplar com mensagens?
Em arquiteturas fortemente acopladas, os serviços chamam uns aos outros de forma síncrona — se o serviço downstream estiver lento ou indisponível, o chamador também ficará bloqueado ou falhará. As filas de mensagens introduzem um buffer assíncrono entre produtores e consumidores, evitando que um serviço downstream lento cause uma cascata de falhas nos serviços upstream. O Azure Service Bus é o serviço de mensagens empresarial da Microsoft, oferecendo filas (ponto a ponto) e tópicos (publicação-assinatura), com recursos de entrega garantida, ordenação e encaminhamento para a fila de mensagens não entregues.
Namespaces e camadas do Service Bus
Um namespace do Service Bus é o contêiner de nível superior para todas as entidades de mensagens (filas e tópicos) e fornece o endpoint FQDN (por exemplo, myns.servicebus.windows.net). Os namespaces estão disponíveis em três camadas: Basic (somente filas, sem tópicos, tamanho máximo de mensagem de 256 KB), Standard (filas e tópicos, máximo de 256 KB) e Premium (filas e tópicos, mensagens de até 100 MB, capacidade dedicada, integração com VNet e recuperação de desastre geográfico). A camada Premium é necessária para cargas de trabalho de produção que exigem desempenho respaldado por SLA.
# Create a Service Bus namespace (Standard tier)
az servicebus namespace create \
--resource-group myRG \
--name myservicebusns \
--location eastus \
--sku StandardFilas: mensagens ponto a ponto
Uma fila do Service Bus armazena mensagens na ordem FIFO e entrega cada mensagem a exatamente um consumidor. Os consumidores recebem mensagens usando um mecanismo de bloqueio ao consultar: a mensagem fica temporariamente oculta para outros consumidores enquanto é processada. Se o consumidor concluir o processamento com êxito, ele chama CompleteMessage() para remover a mensagem da fila. Se o processamento falhar, o consumidor chama AbandonMessage(), e a mensagem volta a ficar visível para outra tentativa. Após um número configurável de tentativas de entrega, as mensagens que não puderem ser processadas serão movidas para a fila de mensagens não entregues (DLQ).
# Create a Service Bus queue with DLQ enabled
az servicebus queue create \
--resource-group myRG \
--namespace-name myservicebusns \
--name orders \
--max-delivery-count 5 \
--default-message-time-to-live P7D \
--dead-lettering-on-message-expiration trueTópicos e assinaturas
Tópicos implementam o padrão de publicação-assinatura: um produtor envia uma mensagem para um tópico, e qualquer número de assinaturas desse tópico recebe uma cópia da mensagem. As assinaturas podem ter filtros (expressões SQL ou de correlação) para receber apenas um subconjunto das mensagens — por exemplo, uma assinatura HighPriority que recebe somente mensagens cuja propriedade Priority seja igual a High. Isso permite que um único tópico distribua mensagens para vários serviços downstream, cada um interessado em um subconjunto diferente de eventos.
# Create a topic and two subscriptions with filters
az servicebus topic create \
--resource-group myRG \
--namespace-name myservicebusns \
--name order-events
az servicebus topic subscription create \
--resource-group myRG \
--namespace-name myservicebusns \
--topic-name order-events \
--name high-priority-sub
az servicebus topic subscription rule create \
--resource-group myRG \
--namespace-name myservicebusns \
--topic-name order-events \
--subscription-name high-priority-sub \
--name PriorityFilter \
--filter-sql-expression 'Priority = '"'"'High'"'"''Enviando e recebendo mensagens
O SDK do Azure Service Bus fornece um ServiceBusClient para enviar e receber mensagens. Para enviar, crie um ServiceBusSender e chame SendMessageAsync(). Para receber, crie um ServiceBusReceiver e chame ReceiveMessageAsync() (baseado em pull) ou use um ServiceBusProcessor com um manipulador de eventos para o processamento contínuo baseado em push. Usar DefaultAzureCredential com o SDK do Service Bus elimina a necessidade de cadeias de conexão, mantendo o padrão sem senha.
# Python: Send a message to a Service Bus queue
from azure.servicebus import ServiceBusClient, ServiceBusMessage
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = ServiceBusClient(
fully_qualified_namespace='myservicebusns.servicebus.windows.net',
credential=credential
)
with client.get_queue_sender(queue_name='orders') as sender:
msg = ServiceBusMessage('{ 'orderId': '12345', 'amount': 99.99 }')
sender.send_messages(msg)
print('Message sent')Fila de mensagens não entregues
A fila de mensagens não entregues (DLQ) é uma subfila que recebe automaticamente as mensagens que não podem ser entregues. As mensagens são encaminhadas para a fila de mensagens não entregues quando: excedem a contagem máxima de entregas, expiram (o TTL é atingido) ou falham na avaliação de um filtro de assinatura de tópico. Monitorar a DLQ é essencial — uma DLQ em crescimento indica uma falha sistemática de processamento. As mensagens da DLQ mantêm seu conteúdo original, além das propriedades de motivo do encaminhamento para a fila de mensagens não entregues e descrição, adicionadas pelo Service Bus para ajudar a diagnosticar a causa raiz.
# Read messages from the dead-letter queue
az servicebus queue show \
--resource-group myRG \
--namespace-name myservicebusns \
--name 'orders/$DeadLetterQueue' \
--query 'countDetails.deadLetterMessageCount'Sessões de mensagens para ordenação
Sessões permitem a ordenação rigorosa de mensagens que pertencem ao mesmo grupo lógico. Cada mensagem recebe um SessionId (por exemplo, um ID de cliente ou order ID), e um consumidor que reconhece sessões recebe exclusivamente todas as mensagens de uma determinada sessão na ordem FIFO. As sessões são essenciais para fluxos de trabalho cujas etapas precisam ser executadas em sequência — como processar todos os eventos de um pedido específico: Criado → PaymentReceived → Enviado → Entregue. As sessões são habilitadas no momento da criação da fila ou da assinatura.
Service Bus vs. Event Grid vs. Event Hubs
Esses três serviços de mensagens do Azure costumam ser confundidos: o Service Bus é voltado para mensagens empresariais confiáveis e transacionais, com ordenação, sessões e DLQ — adequado para processamento de pedidos, transações financeiras e orquestração de fluxos de trabalho. O Event Grid é voltado para o roteamento reativo de eventos (um blob foi carregado, uma VM foi excluída), com distribuição para vários manipuladores, mas sem ordenação ou reprodução. O Event Hubs é voltado para transmissão de eventos com alto rendimento (milhões de eventos por segundo), com capacidade de reprodução — adequado para telemetria de IoT e ingestão de registros. Escolha com base nos requisitos de ordenação, rendimento e durabilidade.
Recuperação de desastre geográfico
A recuperação de desastre geográfico (Geo-DR) do Service Bus replica os metadados do namespace (filas, tópicos, assinaturas e políticas de acesso) para uma região secundária. As regiões emparelhadas compartilham um único nome de host de alias; se a região primária falhar, você inicia um failover, e o alias passa a resolver para a região secundária. Observe que os dados das mensagens (mensagens em trânsito) não são replicados na camada Standard — somente a Geo-DR da camada Premium replica mensagens. Para mensagens essenciais à operação, use Premium + Geo-DR para atender aos requisitos de RTO e RPO.
Dimensionamento e entidades particionadas
Para cenários de alto rendimento, habilite o particionamento de filas e tópicos no momento da criação. As entidades particionadas usam internamente vários agentes de mensagens e fragmentos de armazenamento, multiplicando a capacidade de rendimento. Na camada Standard, as entidades particionadas têm tamanho total de até 80 GB. Cada mensagem é roteada para uma partição com base em sua propriedade PartitionKey (por padrão, o ID da sessão, se as sessões estiverem habilitadas). O particionamento é uma decisão única tomada durante a criação — não é possível particionar uma fila existente. Use a camada Premium para obter o maior rendimento garantido sem a complexidade do particionamento.
# Create a partitioned queue (Standard tier)
az servicebus queue create \
--resource-group myRG \
--namespace-name myservicebusns \
--name orders-partitioned \
--enable-partitioning trueMonitorando a integridade do Service Bus
Principais métricas do Service Bus a serem monitoradas no Azure Monitor: Active Messages (profundidade da fila — uma profundidade crescente indica atraso do consumidor), Dead-lettered Messages (falhas de processamento), Server Errors e User Errors (problemas de autenticação e limitação) e Incoming Requests (rendimento geral). Configure alertas de métricas para que as equipes de operações sejam notificadas quando a fila de mensagens não entregues crescer além de um limite ou quando as mensagens ativas não forem consumidas durante um período prolongado.
Verificação rápida
Teste sua compreensão dos conceitos do Microsoft Azure Fundamentals (AZ-900) desta lição.
Recapitulação da lição
Nesta lição, você aprendeu que: as filas do Service Bus fornecem mensagens ponto a ponto com entrega por bloqueio ao consultar e uma fila de mensagens não entregues para mensagens com falha; os tópicos e as assinaturas distribuem mensagens para vários consumidores usando regras de filtro; e as sessões permitem o processamento ordenado de mensagens pertencentes ao mesmo grupo lógico. A seguir, exploraremos o Azure Container Apps para implantar microsserviços modernos.
Perguntas Frequentes
A aula “Azure Service Bus para mensagens desacopladas” é grátis?
Sim — o texto completo de “Azure Service Bus para mensagens desacopladas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Azure Fundamentals, atualize para CoddyKit PRO. O curso de Azure Fundamentals inclui 4 aulas no total.
O que vou aprender em “Azure Service Bus para mensagens desacopladas”?
Crie um namespace do Service Bus com filas e tópicos, envie e receba mensagens de uma aplicação e configure filas de mensagens não entregues para tratar mensagens com falha. Você pratica Azure Fundamentals com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Azure Fundamentals?
Nenhuma experiência prévia é necessária. Azure Fundamentals no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Azure Service Bus para mensagens desacopladas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Azure Fundamentals?
Sim. Cada aula de Azure Fundamentals inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Identidade gerenciada para autenticação sem senha
- Azure Service Bus para mensagens desacopladas
- Azure Container Apps
- Fluxo de trabalho do desenvolvedor de ponta a ponta