Escalando aplicações com o Azure Service Bus

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 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

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

1 comentário

  1. […] saber mais sobre envio de eventos, acesse este artigo que criei utilizando o Azure Service […]

Deixe uma resposta