Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este guia de início rápido fornece instruções passo a passo para um cenário simples de enviar mensagens para uma fila do Service Bus e recebê-las. Neste início rápido, você conclui as seguintes tarefas:
Criar um espaço de nomes do Service Bus com o Portal do Azure.
Criar uma fila do Service Bus com o portal do Azure.
Escreva um aplicativo JavaScript para usar o pacote @azure/service-bus para:
- Envie um conjunto de mensagens para a fila.
- Receba essas mensagens da fila.
Você pode encontrar exemplos de JavaScript e TypeScript pré-construídos para o Azure Service Bus no repositório do SDK do Azure para JavaScript no GitHub.
Se você for novo no serviço, consulte Visão geral do Service Bus antes de começar.
Pré-requisitos
Uma subscrição do Azure. Para concluir este início rápido, você precisa de uma conta do Azure. Você pode ativar seus créditos mensais do Azure para assinantes do Visual Studio ou se inscrever para uma conta gratuita.
Para usar este início rápido com sua própria conta do Azure:
- Instale a CLI do Azure, que fornece a autenticação sem senha para sua máquina de desenvolvedor.
- Entre com a sua conta do Azure em uma linha de comando com
az login
. - Use a mesma conta ao adicionar a função de dados apropriada ao seu recurso.
- Execute o código na mesma janela do prompt de comando.
- Anote o nome da fila para o namespace do Service Bus. Você precisa disso no código.
Nota
Este tutorial funciona com exemplos que você pode copiar e executar usando o Nodejs. Para obter instruções sobre como criar um aplicativo Node.js, consulte Criar e implantar um aplicativo Node.js em um site do Azure ou Node.js serviço de nuvem usando o Windows PowerShell.
Criar um espaço de nomes no portal do Azure
Para começar a usar entidades de mensagens do Service Bus no Azure, crie um namespace com um nome único em todo o Azure. Um namespace fornece um contêiner de escopo para recursos do Service Bus, como filas e tópicos, em seu aplicativo.
Para criar um espaço de nomes:
Inicie sessão no portal do Azure.
Selecione o menu de opções no canto superior esquerdo e navegue para a página Todos os serviços.
Na barra de navegação esquerda, selecione Integração.
Role para baixo até Serviços de mensagens>Service Bus e selecione Criar.
Na guia Noções básicas da página Criar namespace , siga estas etapas:
Em Assinatura, escolha uma assinatura do Azure na qual criar o namespace.
Para Grupo de recursos, escolha um grupo de recursos existente ou crie um novo.
Insira um nome de namespace que atenda às seguintes convenções de nomenclatura:
- O nome deve ser exclusivo no Azure. O sistema verifica imediatamente a disponibilidade do nome.
- O comprimento do nome é de pelo menos 6 e no máximo 50 caracteres.
- O nome pode conter apenas letras, números hífenes
-
. - O nome deve começar com uma letra e terminar com uma letra ou número.
- O nome não termina com
-sb
ou-mgmt
.
Em Local, escolha a região para hospedar seu namespace.
Em Nível de preço, selecione o nível de preço (Básico, Standard ou Premium) para o namespace. Para este início rápido, selecione Padrão.
Se você selecionar a camada Premium , poderá habilitar a replicação geográfica para o namespace. O recurso de replicação geográfica garante que os metadados e os dados de um namespace sejam replicados continuamente de uma região primária para uma ou mais regiões secundárias.
Importante
Se você quiser usar tópicos e assinaturas, escolha Standard ou Premium. Não há suporte para tópicos e assinaturas no nível de preço Básico.
Se você selecionou o nível de preço Premium, especifique o número de unidades de mensagens. A camada premium fornece isolamento de recursos no nível de CPU e memória para que cada carga de trabalho seja executada isoladamente. Este contentor de recursos é designado por unidade de mensagens. Um namespace premium tem pelo menos uma unidade de mensagens. Você pode selecionar 1, 2, 4, 8 ou 16 unidades de mensagens para cada namespace Premium do Service Bus. Para obter mais informações, consulte Camada de mensagens premium do Service Bus.
Selecione Rever + criar na parte inferior da página.
Na página Rever + criar, reveja as definições e selecione Criar.
Depois que a implantação do recurso for bem-sucedida, selecione Ir para o recurso na página de implantação.
Você vê a home page do namespace do barramento de serviço.
Criar uma fila no portal do Azure
Na página Namespace do Service Bus, expanda Entidades no menu de navegação à esquerda e selecione Filas.
Na página Filas , na barra de ferramentas, selecione + Fila.
Insira um nome para a fila. Deixe os outros valores com seus padrões.
Selecione Criar.
Autenticar o aplicativo no Azure
Este artigo mostra duas maneiras de se conectar ao Barramento de Serviço do Azure: sem senha e cadeia de conexão.
A primeira opção mostra como usar sua entidade de segurança no Microsoft Entra ID e RBAC (controle de acesso baseado em função) para se conectar a um namespace do Service Bus. Você não precisa se preocupar em ter uma cadeia de conexão codificada em seu código, em um arquivo de configuração ou em um armazenamento seguro como o Azure Key Vault.
A segunda opção mostra como usar uma cadeia de conexão para se conectar a um namespace do Service Bus. Se você for novo no Azure, talvez ache a opção de cadeia de conexão mais fácil de seguir. Recomendamos o uso da opção sem senha em aplicativos e ambientes de produção do mundo real. Para obter mais informações, consulte Autenticação e autorização do Service Bus. Para ler mais sobre autenticação sem senha, consulte Autenticar aplicativos .NET.
Atribuir funções ao usuário do Microsoft Entra
Ao desenvolver localmente, verifique se a conta de usuário que se conecta ao Barramento de Serviço do Azure tem as permissões corretas. Você precisa da função Proprietário de Dados do Barramento de Serviço do Azure para enviar e receber mensagens. Para atribuir essa função a si mesmo, você precisa da função de Administrador de Acesso de Usuário ou outra função que inclua a Microsoft.Authorization/roleAssignments/write
ação.
Você pode atribuir funções do RBAC do Azure a um usuário usando o portal do Azure, a CLI do Azure ou o Azure PowerShell. Para saber mais sobre os escopos disponíveis para atribuições de função, consulte Entender o escopo do RBAC do Azure.
O exemplo a seguir atribui a Azure Service Bus Data Owner
função à sua conta de usuário, que fornece acesso total aos recursos do Barramento de Serviço do Azure. Em um cenário real, siga o princípio do menor privilégio para dar aos usuários apenas as permissões mínimas necessárias para um ambiente de produção mais seguro.
Funções internas do Azure para o Barramento de Serviço do Azure
Para o Barramento de Serviço do Azure, o gerenciamento de namespaces e todos os recursos relacionados por meio do portal do Azure e da API de gerenciamento de recursos do Azure já está protegido usando o modelo RBAC do Azure. O Azure fornece as seguintes funções internas do Azure para autorizar o acesso a um namespace do Service Bus:
- Proprietário de Dados do Barramento de Serviço do Azure: habilita o acesso a dados ao namespace do Barramento de Serviço e suas entidades, incluindo filas, tópicos, assinaturas e filtros. Um membro dessa função pode enviar e receber mensagens de filas ou tópicos/assinaturas.
-
Remetente de Dados do Barramento de Serviço do Azure: Use esta função para conceder ao
send
acesso ao namespace do Barramento de Serviço e suas entidades. -
Recetor de Dados do Barramento de Serviço do Azure: use essa função para dar acesso
receive
ao namespace do Barramento de Serviço e suas entidades.
Se você quiser criar uma função personalizada, consulte Direitos necessários para operações do Service Bus.
Adicionar usuário do Microsoft Entra à função de Proprietário do Barramento de Serviço do Azure
Adicione seu nome de usuário do Microsoft Entra à função Proprietário de Dados do Barramento de Serviço do Azure no nível do namespace do Barramento de Serviço. Essa configuração permite que um aplicativo executado no contexto de sua conta de usuário envie mensagens para uma fila ou um tópico. Ele pode receber mensagens de uma fila ou da assinatura de um tópico.
Importante
Na maioria dos casos, leva um ou dois minutos para que a atribuição de função se propague no Azure. Em casos raros, pode demorar até oito minutos. Se você receber erros de autenticação quando executar o código pela primeira vez, aguarde alguns momentos e tente novamente.
Se você não tiver a página Namespace do Service Bus aberta no portal do Azure, localize seu namespace do Service Bus usando a barra de pesquisa principal ou a navegação à esquerda.
Na página Visão geral , selecione Controle de acesso (IAM) no menu à esquerda.
Na página Controle de acesso (IAM), selecione a guia Atribuições de função.
Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função.
Use a caixa de pesquisa para filtrar os resultados para a função desejada. Para este exemplo, procure
Azure Service Bus Data Owner
e selecione o resultado correspondente. Em seguida, escolha Avançar.Em Atribuir acesso a, selecione Utilizador, grupo ou entidade de serviço e, em seguida, selecione + Selecionar membros.
Na caixa de diálogo, procure seu nome de usuário do Microsoft Entra (geralmente seu endereço de e-mail user@domain ) e escolha Selecionar na parte inferior da caixa de diálogo.
Selecione Rever + atribuir para ir para a página final e, em seguida , Rever + atribuir novamente para concluir o processo.
Utilize o NPM (Node Package Manager, Gestor de Pacotes do Nó) para instalar o pacote
Para instalar os pacotes npm necessários para o Service Bus, abra uma janela do Prompt de Comando que tenha
npm
em seu caminho e altere o diretório para a pasta onde você deseja ter seus exemplos.Instale os seguintes pacotes:
npm install @azure/service-bus @azure/identity
Enviar mensagens para uma fila
O código de exemplo a seguir mostra como enviar uma mensagem para uma fila.
Entre com o comando az login
da CLI do Azure para sua máquina local para fornecer a autenticação sem senha necessária neste código.
Abra um editor de texto, como o Visual Studio Code.
Crie um arquivo chamado
send.js
e cole o seguinte código nele. Este código envia os nomes dos cientistas como mensagens para a sua fila.Importante
A credencial sem senha é fornecida usando o DefaultAzureCredential.
const { ServiceBusClient } = require("@azure/service-bus"); const { DefaultAzureCredential } = require("@azure/identity"); // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); // name of the queue const queueName = "<QUEUE NAME>" const messages = [ { body: "Albert Einstein" }, { body: "Werner Heisenberg" }, { body: "Marie Curie" }, { body: "Steven Hawking" }, { body: "Isaac Newton" }, { body: "Niels Bohr" }, { body: "Michael Faraday" }, { body: "Galileo Galilei" }, { body: "Johannes Kepler" }, { body: "Nikolaus Kopernikus" } ]; async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createSender() can also be used to create a sender for a topic. const sender = sbClient.createSender(queueName); try { // Tries to send all messages in a single batch. // Will fail if the messages cannot fit in a batch. // await sender.sendMessages(messages); // create a batch object let batch = await sender.createMessageBatch(); for (let i = 0; i < messages.length; i++) { // for each message in the array // try to add the message to the batch if (!batch.tryAddMessage(messages[i])) { // if it fails to add the message to the current batch // send the current batch as it is full await sender.sendMessages(batch); // then, create a new batch batch = await sender.createMessageBatch(); // now, add the message failed to be added to the previous batch to this batch if (!batch.tryAddMessage(messages[i])) { // if it still can't be added to the batch, the message is probably too big to fit in a batch throw new Error("Message too big to fit in a batch"); } } } // Send the last created batch of messages to the queue await sender.sendMessages(batch); console.log(`Sent a batch of messages to the queue: ${queueName}`); // Close the sender await sender.close(); } finally { await sbClient.close(); } } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });
Substitua
<SERVICE-BUS-NAMESPACE>
pelo namespace do Service Bus.Substitua
<QUEUE NAME>
pelo nome da fila.Para executar o código neste ficheiro, utilize este comando numa linha de comandos:
node send.js
Deverá ver o seguinte resultado.
Sent a batch of messages to the queue: myqueue
Receber mensagens de uma fila
Entre com o comando az login
da CLI do Azure para sua máquina local para fornecer a autenticação sem senha necessária neste código.
Abra um editor de texto, como o Visual Studio Code.
Crie um arquivo chamado
receive.js
e cole o seguinte código nele.const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus"); const { DefaultAzureCredential } = require("@azure/identity"); // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); // name of the queue const queueName = "<QUEUE NAME>" async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createReceiver() can also be used to create a receiver for a subscription. const receiver = sbClient.createReceiver(queueName); // function to handle messages const myMessageHandler = async (messageReceived) => { console.log(`Received message: ${messageReceived.body}`); }; // function to handle any errors const myErrorHandler = async (error) => { console.log(error); }; // subscribe and specify the message and error handlers receiver.subscribe({ processMessage: myMessageHandler, processError: myErrorHandler }); // Waiting long enough before closing the sender to send messages await delay(20000); await receiver.close(); await sbClient.close(); } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });
Substitua
<SERVICE-BUS-NAMESPACE>
pelo namespace do Service Bus.Substitua
<QUEUE NAME>
pelo nome da fila.Para executar o código neste ficheiro, utilize este comando numa linha de comandos:
node receive.js
Deverá ver o seguinte resultado.
Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Steven Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus
Na página Visão geral do namespace do Service Bus no portal do Azure, você pode ver a contagem de mensagens de entrada e saída. Talvez seja necessário aguardar um minuto ou mais e, em seguida, atualizar a página para ver os valores mais recentes.
Selecione a fila nesta página Visão geral para navegar até a página Fila do Service Bus. Você vê a contagem de mensagens recebidas e enviadas nesta página também. Você também verá outras informações, como o tamanho atual da fila, tamanho máximo, contagem de mensagens ativas e assim por diante.
Resolução de Problemas
Se você receber um dos seguintes erros ao executar a versão sem senha do código JavaScript, entre usando o comando da CLI do Azure, az login
. A função apropriada é aplicada à sua conta de usuário do Azure:
- As declarações de 'envio' são necessárias para executar esta operação
- São necessárias declarações de 'Receber' para executar esta operação
Clean up resources (Limpar recursos)
Navegue até o namespace do Service Bus no portal do Azure e selecione Excluir no portal do Azure para excluir o namespace e a fila nele.
Conteúdo relacionado
Consulte a seguinte documentação e exemplos: