Introdução ao Azure Service Bus
O Azure Service Bus é um message broker empresarial totalmente gerenciado que permite comunicações confiáveis entre aplicações e serviços, tanto em ambientes na nuvem quanto híbridos. Ele suporta filas de mensagens (comunicação ponto a ponto) e tópicos do tipo publish-subscribe (distribuição para múltiplos consumidores), sendo ideal para desacoplar sistemas distribuídos.
O Brighter oferece integração nativa com o Azure Service Bus por meio do pacote Paramore.Brighter.MessagingGateway.AzureServiceBus, permitindo roteamento eficiente de comandos e eventos em aplicações .NET.
Requisitos
- .NET 8 ou superior
- Projeto .NET com os seguintes pacotes NuGet:
- Paramore.Brighter.MessagingGateway.AzureServiceBus – Habilita integração com o Azure Service Bus.
- Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection – Integra o Brighter com serviços de mensageria.
- Paramore.Brighter.ServiceActivator.Extensions.Hosting – Hospeda o Brighter como serviço em segundo plano.
- Serilog.AspNetCore – Para logs estruturados (opcional, mas recomendado).
Recapitulando o Brighter
Antes de configurar o Azure Service Bus, vamos relembrar conceitos básicos do Brighter:
Mensagens (Comandos/Eventos)
Defina mensagens usando IRequest
:
public class Greeting : Event(Guid.NewGuid())
{
public string Name { get; set; } = string.Empty;
}
-
Comandos: Operações direcionadas a um único destinatário (ex:
SendEmail
). -
Eventos: Notificações broadcast (ex:
OrderShipped
).
Mapeador de Mensagens
Converte entre mensagens do Brighter e objetos da aplicação:
public class GreetingMapper : IAmAMessageMapper<Greeting>
{
public Message MapToMessage(Greeting request)
{
var header = new MessageHeader
{
Id = request.Id,
TimeStamp = DateTime.UtcNow,
Topic = "greeting.topic",
MessageType = MessageType.MT_EVENT
};
var body = new MessageBody(JsonSerializer.Serialize(request));
return new Message(header, body);
}
public Greeting MapToRequest(Message message)
{
return JsonSerializer.Deserialize<Greeting>(message.Body.Bytes)!;
}
}
Manipulador de Requisições
Processa as mensagens recebidas:
public class GreetingHandler(ILogger<GreetingHandler> logger) : RequestHandler<Greeting>
{
public override Greeting Handle(Greeting command)
{
logger.LogInformation("Olá, {Name}!", command.Name);
return base.Handle(command);
}
}
Configuração do Brighter com Azure Service Bus
1. Configuração da Conexão
Use o provedor de credenciais do Azure para autenticação segura:
var connection = new ServiceBusVisualStudioCredentialClientProvider(".servicebus.windows.net");
Ou use uma connection string:
var connection = new ServiceBusConnectionStringClientProvider("");
2. Inscrição no Azure Service Bus (Consumer)
Assine uma fila ou tópico:
.AddServiceActivator(opt =>
{
opt.Subscriptions = [
new AzureServiceBusSubscription<Greeting>(
new SubscriptionName("greeting-subscription"), // Opcional
new ChannelName("greeting-queue"), // Nome da fila
new RoutingKey("greeting-topic"), // Nome do tópico
bufferSize: 2)
];
opt.ChannelFactory = new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(connection, false));
})
3. Publicação no Azure Service Bus (Producer)
Publique eventos em um tópico:
.UseExternalBus(new AzureServiceBusProducerRegistryFactory(connection, new[]
{
new AzureServiceBusPublication
{
Topic = new RoutingKey("greeting-topic"),
MakeChannels = OnMissingChannel.Create
}
}).Create());
4. Filas de Cartas Mortas (DLQ - Dead Letter Queue)
Habilite DLQs para tratar mensagens problemáticas:
opt.Subscriptions = [
new AzureServiceBusSubscription<Greeting>(
subscriptionName: new SubscriptionName("greeting-subscription"),
channelName: new ChannelName("greeting-queue"),
routingKey: new RoutingKey("greeting-topic"),
subscriptionConfiguration: new AzureServiceBusSubscriptionConfiguration
{
DeadLetteringOnMessageExpiration = true // Ativa DLQ
},
bufferSize: 2
)
];
O Azure Service Bus move automaticamente mensagens expiradas ou com falha para uma DLQ, onde podem ser inspecionadas e tratadas.
Conclusão
A integração entre Brighter e Azure Service Bus permite construir sistemas de mensageria robustos e escaláveis em aplicações .NET. Ao combinar a infraestrutura gerenciada do Azure com a abstração oferecida pelo Brighter, você pode:
- Desacoplar serviços usando padrões de publish-subscribe.
- Garantir ordenação e confiabilidade nas mensagens.
- Simplificar o tratamento de erros com DLQs.
Para uso em produção, sempre valide as configurações contra a documentação mais recente do Brighter.
Referências
- Código completo: Repositório GitHub
- Documentação oficial: Brighter + Azure Service Bus