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.
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.
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.
E a sua implementação a seguir, usando o SendGrid.
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.
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”.
Podemos utilizar um ponto de interrupção para verificar se a classe de consumo de mensagens está funcionando, como a imagem a seguir mostra.
Tudo funcionando como devido!
Quer alavancar sua carreira como Desenvolvedor(a) .NET?
Opa, aqui é o Luis Felipe (LuisDev), criador do blog LuisDev.
Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 700 alunos e também tenho dezenas de mentorados.
Conheça o com mais de 800 video-aulas sobre C# e desenvolvimento de APIs com ASP NET Core, Microsserviços com ASP NET Core, Arquitetura de Software, Computação em Nuvem, SQL, HTML, CSS e JavaScript, JavaScript Intermediário, TypeScript, Desenvolvimento Front-End com Angular, e Desenvolvimento Front-end com React. Diversos mini-cursos disponíveis aos alunos e atualizações gratuitas.
Suporte dedicado, e comunidade de centenas de alunos.
Completo e online, destinado a profissionais que querem dar seu próximo passo em sua carreira como desenvolvedores .NET.
Clique aqui para ter mais informações e garantir sua vaga
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!