A tecnologia virou estratégia de negócio crucial para qualquer empresa e existem muitas partes da solução que devem ser levadas em consideração, como escalabilidade e integração entre aplicações. Neste artigo apresento o Azure Service Bus, utilizado para se comunicar de forma assíncrona entre aplicações, garantido que elas estejam totalmente desacopladas.
Azure Service Bus
O Azure Service Bus é um message broker gerenciado com filas de mensagens e tópicos de publish/subscribe, utilizado para separar aplicações e serviços uns dos outros:
- Fila: Permitem o processamento sequencial de mensagens por um único consumidor (1×1)
- Tópico: Permite o processamento de mensagens por vários consumidores (1xN)
Os maiores benefícios em utilizar o Azure Service Bus são:
- Escalar aplicações e evitar overhead de processamento;
- Ter alta disponibilidade e garantir o envio/recebimento com operações síncronas/assíncronas;
- Ser altamente distribuído (Comunicar com outras aplicações);
- Ser muito seguro, com políticas de autorização e acesso ao conteúdo da mensagem;
- Com a infraestrutura na nuvem, sem se preocupar com Backup, Disaster Recovery e disponibilidade do serviço;
- Não depender de uma infraestrutura on-premises que precisa ser gerenciada, sem se preocupar com gerenciamento de servidores, disponibilidade, backup, etc;
Contratar o Azure Service Bus é total investimento para sua empresa. Com o custo médio de R$ 50,00 mensais, é possível contratar este serviço na camada Standard, possibilitando o envio de até 13 milhões de mensagens por mês.
Configurando o Azure Service Bus
O primeiro passo é configurar o serviço no Azure, selecionando o Service Bus, clique em create e configure conforme a imagem abaixo:
Pronto, é tudo o que precisa por enquanto.
Configurando o envio/publish das mensagens
Neste exemplo, utilizaremos o MassTransit para simplificar a comunicação com o Azure Service Bus no envio e recebimento de mensagens entre aplicações. Mais detalhes sobre a utilização deste pacote você encontra no artigo: RabbitMQ com MassTransit no .NET 6.
Na classe program.cs da sua API em .NET 6.0, configure conforme o código abaixo:
Onde a extensão do método AddMassTransitExtension contém o seguinte código:
A connection string de nome AzureServiceBus é a conexão com seu serviço criado no primeiro passo deste artigo. Para obter, basta clicar em Shared access policies do seu Azure Service Bus e copiar Primary Connection String:
Para o envio de mensagens, é necessário configurar a controller com o código:
O IPublishEndpoint é responsável pela publicação das mensagens enviadas para o Azure Service Bus e a classe ClientModel é a representação do objeto que será trafegado de uma ponta à outra.
Configurando o recebimento/subscribe das mensagens
Para o recebimento das mensagens utilizaremos o Worker Service, que trabalha como uma aplicação executada em segundo plano, responsável apenas por consumir e processar mensagens. Esse tipo de aplicação é uma ótima escolha em ambientes distribuídos/microservices por ser extremamente leve e carregando apenas o necessário, facilitando na escala.
Na classe program.cs, configure conforme o código abaixo:
Com o MassTransit é possível realizar configurações estratégicas dos topics e queues, o que facilita ainda mais o manuseio com o barramento.
O consumidor/subscribe das nossas mensagens (WorkerClient) contém o seguinte código:
Ao executar a aplicação pela primeira vez, é criado automaticamente um tópico no Azure Service Bus pelo MassTransit conforme as configurações criadas no método ReceiveEndpoint. Por padrão, o nome do tópico criado é uma junção do namespace do consumidor com o nome da classe que representa à mensagem (ClientModel), conforme a imagem abaixo:
Solução Completa
A estrutura da solução completa fica assim:
- Sample.AzureServiceBus.WebAPI: API responsável pelo envio de mensagens.
- Sample.AzureServiceBus.Worker: Worker Service responsável pelo recebimento das mensagens.
- Sample.AzureServiceBus.WebApi.Core: Abstrações genéricas utilizadas pela API e Worker
Para realizar os testes é preciso configurar a solução com a inicialização simultânea do projeto WebApi e Worker, onde é possível acompanhar o envio e recebimento das mensagens:
Para maior controle, configurações e acompanhamento dos envios e recebimentos das mensagens, sugiro utilizar o Azure Service Bus Explorer:
Finalizando
O Azure Service Bus é uma ferramenta indispensável para sua aplicação se tornar altamente escalável e com o custo muito em conta. A biblioteca MassTransit serve de apoio ao desenvolvedor para uma melhor experiência com o barramento, simplificando o envio e recebimento de mensagens.
Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-azure-service-bus
[…] saber mais sobre envio de eventos, acesse este artigo que criei utilizando o Azure Service […]