<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rafael Santana</title>
    <description>The latest articles on DEV Community by Rafael Santana (@rafael).</description>
    <link>https://dev.to/rafael</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F246110%2F7bd0fda8-0aa1-421d-91b2-8d0d8b970e3c.png</url>
      <title>DEV Community: Rafael Santana</title>
      <link>https://dev.to/rafael</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rafael"/>
    <language>en</language>
    <item>
      <title>Utilizando o Azure Service Bus com Node.js</title>
      <dc:creator>Rafael Santana</dc:creator>
      <pubDate>Sat, 12 Oct 2019 14:52:03 +0000</pubDate>
      <link>https://dev.to/msplatam/utilizando-o-azure-service-bus-com-node-js-3dkg</link>
      <guid>https://dev.to/msplatam/utilizando-o-azure-service-bus-com-node-js-3dkg</guid>
      <description>&lt;p&gt;O &lt;a href="https://azure.microsoft.com/pt-br/services/service-bus/?WT.mc_id=msplatam-devto-cxa"&gt;Azure Service Bus&lt;/a&gt; é um sistema de mensagem como serviço (MaaS) que proporciona o desacoplamento de aplicações por meio da distribuição de mensagens entre sistemas. Esse desacoplamento permite a criação de soluções altamente escalonáveis.&lt;/p&gt;

&lt;p&gt;Mas antes da implementação, iremos entender como o serviço funciona e os conceitos envolvidos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conceitos
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O que é uma mensagem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma mensagem é um tipo de dados que serve para a comunicação entre os sistemas. Essa mensagem pode ser um simples JSON como também um arquivo de imagem ou apenas texto. Uma mensagem é dividida em &lt;strong&gt;Payload&lt;/strong&gt; e em &lt;strong&gt;Label&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payload: O payload é o corpo da mensagem onde estão localizados os dados que serão transmitidos.&lt;/li&gt;
&lt;li&gt;Label: O label serve para informar quem receberá a mensagem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O que é uma fila?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A fila é o local onde as mensagens ficam armazenadas após serem enviadas pelo remetente e também é o local onde o receptor irá receber mensagens para então processá-las.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ODGOI5Rt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/CLPG9G1v/about-service-bus-queue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ODGOI5Rt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/CLPG9G1v/about-service-bus-queue.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que são os tópicos?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os tópicos também são utilizados para enviar e receber mensagens. Enquanto a fila é usado apenas para comunicação ponta-a-ponta, os tópicos são utilizados para cenários onde hajam múltiplos receptores. Um receptor inscrito em um tópico recebe uma cópia de cada mensagem presente naquele tópico.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--keBzakO3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/htXLnXQK/about-service-bus-topic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--keBzakO3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/htXLnXQK/about-service-bus-topic.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demonstração
&lt;/h2&gt;

&lt;p&gt;Com esses conceitos em mente, estaremos prontos para iniciar um pequeno projeto simulando o clássico produtor/consumidor. Para esse exemplo iremos utilizar as seguintes ferramentas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.visualstudio.com/?WT.mc_id=msplatam-devto-cxa"&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-us/free/?WT.mc_id=msplatam-devto-cxa"&gt;Conta no Microsoft Azure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para os universitários de plantão: o Azure disponibiliza um crédito de U$100,00 para você utilizar os serviços sem precisar cadastrar um cartão de crédito. Ative seu benefício &lt;a href="https://azure.microsoft.com/pt-br/free/students/?WT.mc_id=msplatam-devto-cxa"&gt;aqui&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando o Service Bus no Azure
&lt;/h3&gt;

&lt;p&gt;O processo de criação do recurso &lt;a href="https://azure.microsoft.com/pt-br/services/service-bus/?WT.mc_id=msplatam-devto-cxa"&gt;Service Bus&lt;/a&gt; é muito simples. É necessário realizar o login e acessar o painel do Azure. Você pode criar o recurso através do menu localizado a esquerda ou pesquisando por &lt;a href="https://azure.microsoft.com/pt-br/services/service-bus/?WT.mc_id=msplatam-devto-cxa"&gt;Service Bus&lt;/a&gt; na barra de pesquisa, como mostrado abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XVzQhB4R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/RhPt5mM3/Capturar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XVzQhB4R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/RhPt5mM3/Capturar.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Durante a criação do recurso, serão solicitadas algumas informações. Preencha semelhante a imagem abaixo, clique em &lt;strong&gt;Create&lt;/strong&gt; e aguarde a finalização do processo de criação.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DigQrRVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/h4MT7L9S/Capturar2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DigQrRVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/h4MT7L9S/Capturar2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após finalizado o processo de criação, devemos salvar a string de conexão gerada. É através dessa string que nossa aplicação se comunicará com o Azure e enviará/receberá as mensagens. Para isso, entre no recurso Service Bus criado e através do menu de navegação esquerdo, em &lt;strong&gt;Settings&lt;/strong&gt;, procure por &lt;strong&gt;Shared access policies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EZqrcWdp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/wvpLDFfB/Capturar-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EZqrcWdp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/wvpLDFfB/Capturar-3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clique em &lt;strong&gt;RootManageSharedAccessKey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5oBs37ej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/W1xM1s0g/Capturar-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5oBs37ej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/W1xM1s0g/Capturar-4.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em seguida, anote a string de conexão mostrada em &lt;strong&gt;Primary Connection String&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wOHQk6VL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/k4v8s8zv/Capturar-5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wOHQk6VL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/k4v8s8zv/Capturar-5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Certo, agora precisamos criar uma fila para armazenar as mensagens em nosso Service Bus. Para isso, vá até &lt;strong&gt;Overview&lt;/strong&gt; e clique em &lt;strong&gt;Queue&lt;/strong&gt;. Será exibido um formulário para configurarmos nossa fila. Veja a imagem abaixo como exemplo e após preenchido clique em &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlTXFJwS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/rsy4PsLX/Capturar-6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlTXFJwS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/rsy4PsLX/Capturar-6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após finalizado, estaremos prontos para desenvolver nossa aplicação de exemplo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mão na massa
&lt;/h3&gt;

&lt;p&gt;Abra seu &lt;a href="http://code.visualstudio.com/?WT.mc_id=msplatam-devto-cxa"&gt;Visual Studio Code&lt;/a&gt; e no terminal crie um novo projeto Node.js através do comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init -y
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Esse comando irá criar um arquivo package.json padrão. Abra o package.json e substitua pelo código abaixo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "name":  "azure-service-bus",
    "version":  "1.0.0",
    "description":  "Exemplo de funcionamento do Azure Service Bus",
    "main":  "src/factory.js",
    "scripts": {
        "factory":  "node src/factory.js",
        "consumer":  "node src/consumer.js"
    },
    "repository": {
        "type":  "git",
        "url":  "https://github.com/jrafaelsantana/azure-servicebus-exemplo.git"
    },
    "author":  "Rafael Santana",
    "license":  "MIT"
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Organizando o projeto
&lt;/h3&gt;

&lt;p&gt;Crie os diretórios e arquivos conforme a imagem abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hYf2qo0V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/5tv8HDmG/Capturar-7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hYf2qo0V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/5tv8HDmG/Capturar-7.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Instalando as dependências
&lt;/h3&gt;

&lt;p&gt;Para esse exemplo precisamos instalar dois pacotes. São eles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;@azure/service-bus&lt;/li&gt;
&lt;li&gt;config&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O @azure/service-bus é uma biblioteca para criar clientes do &lt;a href="https://azure.microsoft.com/pt-br/services/service-bus/?WT.mc_id=msplatam-devto-cxa"&gt;Azure Service Bus&lt;/a&gt; em Node.js. Para instalar, execute o comando:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @azure/service-bus
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O config é um pacote para definirmos parâmetros de ambiente. Usaremos esse pacote para manter nosso código organizado e limpo. Instale o config através do comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Configurações da conexão
&lt;/h3&gt;

&lt;p&gt;Abra o arquivo &lt;strong&gt;config/default.json&lt;/strong&gt; e preencha seguindo o modelo abaixo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Azure": {
        "serviceBus": {
            "queueName": "NOME DE SUA FILA",
            "connectionString": "SUA STRING DE CONEXÃO"
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Todas nossas variáveis de ambiente serão armazenadas nesse arquivo, facilitando a manutenção do código.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criação do produtor de mensagens
&lt;/h3&gt;

&lt;p&gt;Abra o arquivo &lt;strong&gt;src/factory.js&lt;/strong&gt; e inclua o código abaixo. O código está com comentários explicando trechos importantes.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const config = require('config');
const { ServiceBusClient } = require("@azure/service-bus");

async function main() {
    //Cria a conexão com o Service Bus utilizando as configurações em config/default.json
    const cliente = ServiceBusClient.createFromConnectionString(config.get('Azure.serviceBus.connectionString'));
    const fila = cliente.createQueueClient(config.get('Azure.serviceBus.queueName'));
    const sender = fila.createSender();

    try {
        //Fabricamos 20 mensagens
        for (let i = 0; i &amp;lt; 20; i++) {
            //Esse será o conteúdo das nossas mensagens
            const message = {
                body: 'Mensagem ' + i,
                label: 'testes',
                properties: {
                    country: 'Brazil',
                    state: 'PE'
                }
            };
            await sender.send(message); //Envia mensagem
            console.log('Enviou a mensagem ' + i)
        }

        await fila.close(); //Finaliza o cliente da fila
    } finally {
        await cliente.close(); //Finaliza o cliente do Service Bus
    }
}

main().catch((err) =&amp;gt; {
    console.log(err);
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Criação do consumidor de mensagens
&lt;/h3&gt;

&lt;p&gt;Abra o arquivo &lt;strong&gt;src/consumer.js&lt;/strong&gt; e insira o código abaixo. Semelhante ao &lt;strong&gt;factory.js&lt;/strong&gt;, o código está com comentários explicando seu funcionamento.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const config = require('config');
const { ServiceBusClient, ReceiveMode } = require("@azure/service-bus");

async function main() {
    //Cria a conexão com o Service Bus utilizando as configurações em config/default.json
    const cliente = ServiceBusClient.createFromConnectionString(config.get('Azure.serviceBus.connectionString'));
    const fila = cliente.createQueueClient(config.get('Azure.serviceBus.queueName'));
    const receiver = fila.createReceiver(ReceiveMode.ReceiveAndDelete); //Cria um receptor no modo ReceiveAndDelete

    try {
        //Cria um loop que aguarda novas mensagens serem inseridas na fila para consumi-las
        for await (let message of receiver.getMessageIterator()) {
            if (typeof message != 'undefined') {
                console.log('Mensagem recebida: ' + message.body);
                await message.complete(); //Informa que a mensagem foi lida
            }
        }
        await fila.close(); //Finaliza o cliente da fila
    } finally {
        await cliente.close(); //Finaliza o cliente do Service Bus
    }
}

main().catch((err) =&amp;gt; {
    console.log("Error occurred: ", err);
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pronto, nosso produtor e consumidor já estão concluídos. Vamos executar nosso projeto de exemplo para verificar se está funcionando corretamente. Primeiramente, vamos testar nosso &lt;strong&gt;factory.js&lt;/strong&gt;. Para isso, vá até o terminal e execute o comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run factory
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7eP1oABG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/MKTR0nD1/Capturar-8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7eP1oABG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/MKTR0nD1/Capturar-8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se for mostrado algo semelhante a imagem acima, o seu &lt;strong&gt;factory.js&lt;/strong&gt; está funcionando. Agora, vamos testar nosso &lt;strong&gt;consumer.js&lt;/strong&gt; utilizando o comando:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run consumer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bjQlbvD2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/Gh5DXb7V/Capturar-9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bjQlbvD2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.postimg.cc/Gh5DXb7V/Capturar-9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tudo certo! As mensagens foram consumidas da nossa fila. Note que nosso &lt;strong&gt;consumer.js&lt;/strong&gt; continua em execução mesmo após ter consumido todas as mensagens da fila. Isso acontece pois nosso consumidor foi construído para sempre verificar a existência de novas mensagens. Experimente executar novamente o &lt;strong&gt;consumer.js&lt;/strong&gt; enquanto o &lt;strong&gt;factory.js&lt;/strong&gt; está aguardando as mensagens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D38fbLzT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/75gmx58gjg7vwr5u3hso.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D38fbLzT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/75gmx58gjg7vwr5u3hso.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você também pode receber um conjunto de mensagem de uma única vez utilizando o método &lt;strong&gt;receiveMessages&lt;/strong&gt; como o exemplo abaixo:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Consume um conjunto de 10 mensagens de uma única vez
const messages = await receiver.receiveMessages(10);
console.log(messages.length + ' mensagens recebidas:');

for await (let message of messages) {
    console.log(message.body);
    await message.complete();
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YI7wDe16--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/1jrofwojutbt5epkixvo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YI7wDe16--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/1jrofwojutbt5epkixvo.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Interessante, não é? O &lt;a href="https://azure.microsoft.com/pt-br/services/service-bus/?WT.mc_id=msplatam-devto-cxa"&gt;Azure Service Bus&lt;/a&gt; é uma ferramenta indispensável para sua aplicação se tornar altamente escalável. A biblioteca do Service Bus não está disponível apenas para o Node.js mas também para .NET, Java, Python, PHP e Ruby.&lt;/p&gt;

&lt;p&gt;Se quiser saber mais sobre as funcionalidades do Azure Service Bus visite a &lt;a href="https://docs.microsoft.com/pt-br/azure/service-bus-messaging/?WT.mc_id=msplatam-devto-cxa"&gt;documentação oficial&lt;/a&gt;. A documentação é bastante completa e contém vários exemplos de código.&lt;/p&gt;

&lt;p&gt;Todo o código está disponibilizado &lt;a href="https://github.com/jrafaelsantana/azure-servicebus-exemplo"&gt;nesse repositório&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

&lt;p&gt;=D&lt;/p&gt;

</description>
      <category>azure</category>
      <category>node</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
