ASP.NET Core e Azure Service Bus: mensageria na nuvem - Parte 2

Nesta segunda é última parte sobre o ASP.NET Core e o Azure Service Bus, vou ensinar a como consumir uma mensagem publicada em uma fila dele. Além disso, vou mostrar como deserializá-la em um objeto e acessar suas propriedades, enviando um e-mail de notificação usando o SendGrid como um cenário mais realista para o seu projeto.

Código fonte aqui.


Recapitulando

Na primeira parte, eu mostrei como publicar uma mensagem no Azure Service Bus. Com a mensagem na fila, o próximo passo é criar um “consumidor” para ela. Em nosso caso, nada mais é do que uma classe, com um método que receberia nossa mensagem da fila.


Criando um “consumidor”

O Azure Service Bus tem duas opções para recepção de mensagens: o ReceiveAndDelete e PeekLock. Na primeira opção, a mensagem é recebida e já marcada como consumida. Com isso, a mensagem é perdida em caso de falha. Já na segunda, o processamento é feito em duas etapas. A mensagem é bloqueada para consumo por outros clientes, e então é enviada ao cliente atual. Após o processamento, chama-se o método CompleteAsync nela, e a mensagem é então marcada pelo Service Bus como consumida.

As principais classes utilizadas para a recepção de mensagens são :

  • MessageHandlerOptions: configura opção de recebimento e concorrência;
  • QueueClient: através do método RegisterMessageHandler, permite passar um método para o processamento de mensagens recebidas na fila;

No código abaixo, mostro a implementação de uma classe para processar a mensagem com a estrutura mostrada no artigo anterior.

Implementação da classe Consumer

Também pode-se ver a deserialização da mensagem. Lembrando que o conteúdo da mensagem é um array de bytes (contido na propriedade Body do objeto de tipo Message).

Detalhes sobre o NotificationService será mostrado logo a seguir.


Enviando um e-mail

Em um artigo passado, eu mostrei como enviar mensagens usando o SendGrid.

Para deixar este um exemplo mais real e aplicável ao seu projeto, vou realizar o envio de notificações via e-mail usando os dados da mensagem consumida.

Para isso, criei um serviço de Notificação com a interface a seguir.

Interface do serviço de notificação

E a sua implementação a seguir, usando o SendGrid.

Implementação do serviço de notificação

Configurando a classe Startup

Na classe Startup, mais especificamente no método ConfigureServices, adicionamos o serviço do SendGrid e do EmailNotificationMessageConsumer para nossa aplicação.

Configuração da classe Startup

Executando

Agora executamos a aplicação. 

Caso não tenhamos uma mensagem na fila e queiramos testar apenas o recebimento, façamos o seguinte: navegamos até o nosso serviço do Service Bus, selecionamos nossa fila e clicamos em “Service Bus Explorer (preview)”. Escolhemos o “Content Type” como “Application/json”, preenchemos com um objeto e clicamos em “Send”.

Envio de mensagem usando o Service Bus Explorer

Podemos utilizar um ponto de interrupção para verificar se a classe de consumo de mensagens está funcionando, como a imagem a seguir mostra.

Debugando a classe Consumer

Tudo funcionando como devido!


Inscreva-se na lista de espera do Método .NET Direto ao Ponto, um treinamento completo sobre C#, APIs com ASP.NET Core e Microsserviços:  Inscreva-se aqui.

São quase 200 vídeo-aulas sobre temas como C#, ASP NET Core 5, EF Core, CQRS, Clean Architecture, Autenticação e autorização com JWT, Testes Unitários, além de mini-cursos em Microsserviços, Performance em .NET, ASP NET Core e Azure, Docker, Carreira Internacional em .NET, e mais.


Conclusão

Com essa série de artigos, o objetivo foi mostrar como iniciar e desenvolver uma solução envolvendo ASP.NET Core, mensageria na nuvem Microsoft Azure, e envio de e-mails/notificações. Foram apresentadas as vantagens de se utilizar mensageria, e exemplos de cenários em que essa solução pode ser útil.

Todo feedback é bem-vindo, e até o próximo artigo!