Node.js: Azure Service Bus

Node.js + Azure Service Bus

 

SB (Service Bus) é um serviço do Azure que nos permite enviar mensagens de modo async para diferentes tipos de aplicações, sendo elas desenvolvidas em diferentes tipos de linguagens.

Quando nós criamos esse serviço no Azure, ele fornece uma string de conexão que nos permite acessá-lo. A seguir, você tem um trecho de código demonstrando como seria esse passo em uma aplicação desenvolvida em Node.js:

Node.js Azure Service Bus

 

Mas, como informei acima, podemos utilizar esse serviço com diferentes tipos de linguagens.

A seguir, você tem um print, retirado da documentação oficial da Microsoft, que passa as tecnologias que o SB suporta:

Linguagens Azure Service Bus

 

Seguindo a documentação oficial, o Service Bus (SB) trabalha com o conceito FIFO (first in first out), e podemos utilizar filas e tópicos para o envio das mensagens. Caso esse seja o seu primeiro contato com um serviço de mensageria, a seguir detalharei esse conceito um pouco melhor:

Fila

Semelhante a uma fila de supermercado ou a uma fila indiana como a gente aprendeu na escola, quando utilizamos o SB somente como Queue (fila, em inglês), ele armazenará nossas mensagens e enviará para os serviços, conforme elas forem chegando.

A seguir, você tem uma imagem demonstrando esse passo:

Exemplo de envio Service Bus. Fonte: https://docs.microsoft.com.

 

Tópico

O tópico utiliza o mesmo conceito de fila que vimos no passo anterior, mas a grande diferença é que ele separa os destinatários por assinatura. Um exemplo muito utilizado com tópicos é o Push notification, que recebemos nos nossos apps mobile.

Para ficar mais claro como funcionam os envios por tópico, imagine o seguinte cenário: você tem tópicos com “Assunto X” e “Assunto Y” que as aplicações podem se inscrever (fazer um subscribe) e receber uma mensagem conforme sua assinatura.

A imagem a seguir exemplifica esse passo.

Exemplo de envio de mensagem por tópico no Azure Service Bus

 

Quando o SB receber a mensagem direcionada a um tópico, ele a enviará para todos os usuários que estiverem assinados nele, nos formatos JSON, XML ou TXT.

Para que este artigo não fique somente na parte teórica, criaremos um exemplo prático utilizando Node.js.

Criação do serviço SB no Azure

Para os próximos passos, será necessário ter uma conta no Azure. Caso você não tenha, recomendo a leitura do seguinte artigo: visual-studio-dev-essentials. Lá, apresento um programa de benefícios disponibilizados pela Microsoft, no qual você consegue alguns créditos para utilizar no Azure.

Com a conta criada, acesse o portal do Azure e siga estes passos.

Primeiro, clique em Create a resource no canto superior esquerdo do portal. Em seguida, pesquisa por Service Bus. A seguir, temos uma imagem demonstrando esse passo.

Agora clique em create e preencha os dados de criação de um novo serviço:

  • Name: é o nome do serviço.
  • Pricing tier: utilizarei o Premium neste artigo, mas, caso você queira utilizar outro, recomento a leitura do seguinte tutorial: service-bus-premium-messaging.
  • Messaging Units: é a quantidade de unidades de sistema que será utilizada. Deixarei como 1. Caso tenha interesse em saber mais sobre essa parte, o link anterior também especifica essa parte.
  • Subscriptrion: qual subscription você utilizará nesse recurso.
  • Resource Group: em qual grupo de recursos você deseja criar seu serviço.
  • Location: qual região ele será hospedado. Deixarei o meu em Wes US.

A seguir, temos uma imagem demonstrando como preenchi esses campos.

Criando serviço Azure Service Bus

 

Clique no botão Create e aguarde a mensagem a seguir na sua tela:

Node.js e Azure Service Bus

 

Com o serviço criado no Azure, vamos agora copiar a nossa String de Conexão. Para isso, vá para a tela do serviço que você acabou de criar, clique em Shared access policies -> RootManageSharedAccessKey e copie a sua Connection String.

Connection String Azure Service Bus

 

Projeto Node.js

Para os próximos passos, utilizarei um projeto desenvolvido e versionado no meu GitHub. Caso tenha interesse em clonar esse projeto, segue o seu link: node_service_bus.

Passando rapidamente pela estrutura do projeto, temos:

  • Um diretório chamado arquivos com um vídeo em video1280x720.mp4.
  • Um diretório chamado config com o arquivo azureKey.js. Nesse arquivo, colaremos a nossa String do SB.
  • Arquivo js: nele estamos criando uma fila chamada ‘myqueue’, um objeto chamado vídeo com: {nome e caminho do vídeo}. Em seguida, estamos chamado o método serviceBusService.sendQueueMessage do pacote .
  • Arquivo js: ele é responsável por escutar a fila e, caso chegue uma nova mensagem, deverá processá-la. No nosso cenário, ele fará downgrade de um vídeo (diminuir o tamanho do vídeo).

Com o projeto clonado no seu computador, abra um terminal e navegue até ele. Em seguida, execute o comando npm i para importar os pacotes necessários registrados no arquivo package.json.

O próximo passo é colar a sua string de conexão no arquivo config/azureKey.js. Feito isso, testaremos o código.

Para testar o código, execute o comando no seu terminal node send.js. Em seguida, vá até o portal do Azure, acesse o serviço do SB que você criou nos passos anteriores e clique em: Entities -> Queues -> myqueue (nome da fila que você criou) e note que o SB já recebeu a sua mensagem.

A seguir, temos uma imagem demonstrando esse passo.

Monitoramento SB (Service Bus)

Agora, para receber essa mensagem e processar o vídeo, execute o comando a seguir no seu terminal: node receive.js

Caso os passos anteriores estejam OK, você deve receber a seguinte mensagem no seu console:

Caso o passo anterior seja executado com sucesso, você terá um novo vídeo chamado output.mp4 no diretório arquivos. A seguir, você tem uma imagem demonstrando esse passo.

Downgrade de vídeo com Node.js

 

Voltando ao seu serviço no portal Azure, note que a fila está zerada:

Monitoramento SB

 

Bem simples, né?

Esse é um dos cenários que podemos utilizar o SB. Ele permite utilizarmos tópicos para diferentes tipos de aplicações, criar mais de uma fila, entre outras funções.

A ideia deste artigo foi demonstrar o que é o SB e como dar os primeiros passos com ele utilizando o Node.js. Espero que tenham gostado e até um próximo artigo, pessoal! 😉


Autor:

Microsoft (MVP), atualmente trabalha como Arquiteto de Software para TV Bandeirantes. Nesses últimos anos, focou nas tecnologias criadas pela Microsoft, mas sempre esteve antenado para as novas tecnologias que estão surgindo no mercado. Em um breve resumo, é uma pessoa apaixonada pelo que faz, tem a sua profissão como hobby.