Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esse início rápido fornece instruções passo a passo para um cenário simples de envio e recebimento de mensagens em uma fila do Barramento de Serviço. Você cria um aplicativo Java para enviar e receber mensagens de uma fila do Barramento de Serviço do Azure. Você pode encontrar exemplos Java predefinidos para o Barramento de Serviço do Azure no repositório do SDK do Azure para Java no GitHub.
Dica
Se você estiver trabalhando com recursos do Barramento de Serviço do Azure em um aplicativo Spring, recomendamos considerar o Spring Cloud Azure. O Spring Cloud Azure é um projeto de software livre que fornece integração perfeita do Spring com os serviços do Azure. Para saber mais sobre o Spring Cloud Azure e ver um exemplo usando o Barramento de Serviço, veja Spring Cloud Stream com o Barramento de Serviço do Azure.
Pré-requisitos
Uma assinatura 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 inscrever-se em uma conta gratuita.
Instalar o SDK do Azure para Java.
- Se estiver usando o Eclipse, instale o Azure Toolkit for Eclipse, que inclui o SDK do Azure para Java. Você pode adicionar as Bibliotecas do Microsoft Azure para Java ao seu projeto.
- Se estiver usando o IntelliJ, confira Instalar o Azure Toolkit for IntelliJ.
Criar um namespace no portal do Azure
Para começar a usar as entidades de mensagens do Barramento de Serviço no Azure, crie um namespace com um nome exclusivo no Azure. Um namespace fornece um contêiner de escopo para recursos do Barramento de Serviço, como filas e tópicos, no seu aplicativo.
Para criar um namespace:
Entre no portal do Azure.
Selecione o menu de submenu no canto superior esquerdo e navegue até a página Todos os serviços.
Na barra de navegação à esquerda, selecione Integração.
Role para baixo até oBarramento de > 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.
Em Grupo de recursos, escolha um grupo de recursos existente ou crie um.
Insira um nome de namespace que atenda às seguintes convenções de nomenclatura:
- O nome deve ser exclusivo no Azure. O sistema imediatamente verifica para ver se o nome está disponível.
- O nome deve ter no mínimo 6 e no máximo 50 caracteres.
- O nome pode conter apenas letras, números e hifens
-. - O nome precisa começar com uma letra e terminar com uma letra ou um número.
- O nome não termina com
-sbou-mgmt.
Para Localização, escolha a região para hospedar seu namespace.
Selecione o Tipo de preço (Básico, Standard ou Premium) do namespace. Para esse início rápido, selecione Standard.
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 tipo de preço Básico.
Se você selecionou o tipo de preço Premium, especifique o número de unidades do sistema de mensagens. A camada Premium fornece isolamento de recursos no nível de CPU e memória, de modo que cada carga de trabalho seja executada isoladamente. Esse contêiner de recurso é chamado de unidade do sistema de mensagens. Um namespace premium tem pelo menos uma unidade do sistema de mensagens. Você pode selecionar 1, 2, 4, 8 ou 16 unidades do sistema de mensagens para cada namespace Premium do Barramento de Serviço. Para obter mais informações, veja Camada de mensagens premium do Barramento de Serviço.
Selecione Revisar + criar na parte inferior da página.
Na página Revisar + criar, revise as configuraçõ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ê verá a home page do namespace do barramento de serviço.
Criar uma fila no portal do Azure
Na página Namespace do Barramento de Serviço, 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 valores 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 no RBAC (controle de acesso baseado em função) para se conectar a um namespace do Barramento de Serviço. Você não precisa se preocupar em ter uma cadeia de conexão codificada em código 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 Barramento de Serviço. Se você for iniciante no Azure, poderá achar a opção de cadeia de conexão mais fácil de seguir. É recomendável usar a opção sem senha em aplicativos do mundo real e ambientes de produção. Para saber mais, veja Autenticação e autorização do Barramento de Serviço. 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ê precisará da função Proprietário de dados do Barramento de Serviço do Azure para enviar e receber mensagens. Para atribuir essa função, você precisa da função Administrador de Acesso do Usuário ou de outra função que inclua a ação Microsoft.Authorization/roleAssignments/write .
É possível atribuir funções 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 Noções básicas sobre o escopo do RBAC do Azure.
O exemplo a seguir atribui a função Azure Service Bus Data Owner à sua conta de usuário, que fornece acesso completo aos recursos do Barramento de Serviço do Azure. Em um cenário real, siga o princípio de privilégio mínimo para conceder 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 de todos os recursos relacionados por meio do portal do Azure e da API de gerenciamento de recursos do Azure já está protegido pelo modelo Azure RBAC. O Azure fornece as funções internas do Azure a seguir para autorizar o acesso a um namespace do Barramento de Serviço:
- Proprietário de dados do Barramento de Serviço do Azure: habilita o acesso a dados ao namespace do Barramento de Serviço e as entidades dele, 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 essa função para fornecer o acesso
sendao namespace do Barramento de Serviço e às entidades dele. -
Receptor de dados do Barramento de Serviço do Azure: use essa função para fornecer o acesso
receiveao namespace do Barramento de Serviço e às entidades dele.
Se você quiser criar uma função personalizada, veja Direitos exigidos para as operações do Barramento de Serviço.
Adicionar usuário do Microsoft Entra à função 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 da sua conta de usuário envie mensagens para uma fila ou um tópico. Ele pode receber mensagens de uma fila ou de uma assinatura de um tópico.
Importante
Na maioria dos casos, leva um ou dois minutos para que a atribuição de função seja propagada no Azure. Em casos raros, pode demorar até oito minutos. Se você receber erros de autenticação ao executar o código pela primeira vez, aguarde alguns instantes e tente novamente.
Se você não tiver a página namespace do Barramento de Serviço aberta no portal do Azure, localize o namespace do Barramento de Serviço 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, Adicione a atribuição de função.
Use a caixa de pesquisa para filtrar os resultados para a função desejada. Neste exemplo, pesquise
Azure Service Bus Data Ownere selecione o resultado correspondente. Em seguida, escolha Avançar.Em Atribuir acesso a, selecione Usuário, grupo ou entidade de serviço e, em seguida, escolha + Selecionar membros.
No diálogo, pesquise seu nome de usuário do Microsoft Entra (geralmente, seu endereço de email usuário@domínio) e escolha Selecionar na parte inferior do diálogo.
Selecione Revisar + atribuir para ir para a página final e, em seguida, Revisar + atribuir novamente para concluir o processo.
Enviar mensagens a uma fila
Nesta seção, você criará um projeto de console Java e adicionará código para enviar mensagens para a fila que você criou anteriormente.
Criar um projeto de console Java
Crie um projeto Java usando o Eclipse ou uma ferramenta de sua preferência.
Configurar seu aplicativo para usar o Barramento de Serviço
Adicione referências às bibliotecas do Azure Core e do Barramento de Serviço do Azure.
Se você estiver usando o Eclipse e tiver criado um aplicativo de console Java, converta seu projeto Java em um Maven: clique com o botão direito do mouse no projeto na janela do Gerenciador de Pacotes . Selecione Configurar>Converter para projeto Maven. Em seguida, adicione dependências a essas duas bibliotecas, conforme mostrado no exemplo a seguir.
Atualize o arquivo pom.xml para adicionar dependências ao Barramento de Serviço do Azure e a pacotes do Azure Identity.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-servicebus</artifactId>
<version>7.13.3</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Adicionar o código para enviar mensagens à fila
Adicione as instruções
importa seguir ao tópico do arquivo Java.import com.azure.messaging.servicebus.*; import com.azure.identity.*; import java.util.concurrent.TimeUnit; import java.util.Arrays; import java.util.List;Na classe, defina variáveis para manter a cadeia de conexão e o nome da fila.
static String queueName = "<QUEUE NAME>";Importante
Substitua
<QUEUE NAME>pelo nome da fila.Adicione um método chamado
sendMessageà classe para enviar uma mensagem à fila.Importante
Substitua
NAMESPACENAMEpelo nome do seu namespace do Service Bus.static void sendMessage() { // create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusSenderClient senderClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .sender() .queueName(queueName) .buildClient(); // send one message to the queue senderClient.sendMessage(new ServiceBusMessage("Hello, World!")); System.out.println("Sent a single message to the queue: " + queueName); }Adicione um método chamado
createMessagesà classe para criar uma lista de mensagens. Normalmente, você obtém essas mensagens de diferentes partes do seu aplicativo. Neste exemplo, você usa uma lista de mensagens de exemplo.static List<ServiceBusMessage> createMessages() { // create a list of messages and return it to the caller ServiceBusMessage[] messages = { new ServiceBusMessage("First message"), new ServiceBusMessage("Second message"), new ServiceBusMessage("Third message") }; return Arrays.asList(messages); }Adicione um método chamado
sendMessageBatchpara enviar mensagens à fila criada. Esse método cria umServiceBusSenderClientpara a fila, invoca o métodocreateMessagespara obter a lista de mensagens, prepara um ou mais lotes e envia os lotes à fila.Importante
Substitua
NAMESPACENAMEpelo nome do seu namespace do Service Bus.static void sendMessageBatch() { // create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusSenderClient senderClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .sender() .queueName(queueName) .buildClient(); // Creates an ServiceBusMessageBatch where the ServiceBus. ServiceBusMessageBatch messageBatch = senderClient.createMessageBatch(); // create a list of messages List<ServiceBusMessage> listOfMessages = createMessages(); // We try to add as many messages as a batch can fit based on the maximum size and send to Service Bus when // the batch can hold no more messages. Create a new batch for next set of messages and repeat until all // messages are sent. for (ServiceBusMessage message : listOfMessages) { if (messageBatch.tryAddMessage(message)) { continue; } // The batch is full, so we create a new batch and send the batch. senderClient.sendMessages(messageBatch); System.out.println("Sent a batch of messages to the queue: " + queueName); // create a new batch messageBatch = senderClient.createMessageBatch(); // Add that message that we couldn't before. if (!messageBatch.tryAddMessage(message)) { System.err.printf("Message is too large for an empty batch. Skipping. Max size: %s.", messageBatch.getMaxSizeInBytes()); } } if (messageBatch.getCount() > 0) { senderClient.sendMessages(messageBatch); System.out.println("Sent a batch of messages to the queue: " + queueName); } //close the client senderClient.close(); }
Receber mensagens de uma fila
Nessa seção, você adicionará o código para recuperar mensagens da fila.
Adicione um método chamado
receiveMessagespara receber mensagens da fila. Esse método cria umServiceBusProcessorClientpara a fila especificando um manipulador para o processamento de mensagens e outro para o tratamento de erros. Em seguida, ele inicia o processador, aguarda alguns segundos, imprime as mensagens recebidas e, por fim, interrompe e fecha o processador.Importante
- Substitua
NAMESPACENAMEpelo nome do seu namespace do Service Bus.
// handles received messages static void receiveMessages() throws InterruptedException { DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusProcessorClient processorClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .processor() .queueName(queueName) .processMessage(context -> processMessage(context)) .processError(context -> processError(context)) .buildProcessorClient(); System.out.println("Starting the processor"); processorClient.start(); TimeUnit.SECONDS.sleep(10); System.out.println("Stopping and closing the processor"); processorClient.close(); }- Substitua
Adicione o método
processMessagepara processar uma mensagem recebida da assinatura do Barramento de Serviço.private static void processMessage(ServiceBusReceivedMessageContext context) { ServiceBusReceivedMessage message = context.getMessage(); System.out.printf("Processing message. Session: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(), message.getSequenceNumber(), message.getBody()); }Adicione o método
processErrorpara manipular mensagens de erro.private static void processError(ServiceBusErrorContext context) { System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n", context.getFullyQualifiedNamespace(), context.getEntityPath()); if (!(context.getException() instanceof ServiceBusException)) { System.out.printf("Non-ServiceBusException occurred: %s%n", context.getException()); return; } ServiceBusException exception = (ServiceBusException) context.getException(); ServiceBusFailureReason reason = exception.getReason(); if (reason == ServiceBusFailureReason.MESSAGING_ENTITY_DISABLED || reason == ServiceBusFailureReason.MESSAGING_ENTITY_NOT_FOUND || reason == ServiceBusFailureReason.UNAUTHORIZED) { System.out.printf("An unrecoverable error occurred. Stopping processing with reason %s: %s%n", reason, exception.getMessage()); } else if (reason == ServiceBusFailureReason.MESSAGE_LOCK_LOST) { System.out.printf("Message lock lost for message: %s%n", context.getException()); } else if (reason == ServiceBusFailureReason.SERVICE_BUSY) { try { // Choosing an arbitrary amount of time to wait until trying again. TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { System.err.println("Unable to sleep for period of time"); } } else { System.out.printf("Error source %s, reason %s, message: %s%n", context.getErrorSource(), reason, context.getException()); } }Atualize o método
mainpara invocar os métodossendMessage,sendMessageBatchereceiveMessagese gerarInterruptedException.public static void main(String[] args) throws InterruptedException { sendMessage(); sendMessageBatch(); receiveMessages(); }
Executar o aplicativo
Se você estiver usando o Eclipse, clique com o botão direito do mouse no projeto, selecione Exportar, expanda Java, escolha Arquivo JAR executável e siga as etapas para criar um arquivo JAR executável.
Se você estiver conectado com uma conta de usuário diferente daquela que foi adicionada à função Proprietário de Dados do Barramento de Serviço do Azure, siga estas etapas. Caso contrário, passe para executar o arquivo Jar na próxima etapa.
Instale a CLI do Azure no seu computador.
Execute o comando da CLI a seguir para entrar no Azure. Use a mesma conta de usuário que você adicionou à função Proprietário de Dados do Barramento de Serviço do Azure.
az login
Execute o arquivo Jar usando o comando a seguir.
java -jar <JAR FILE NAME>Você verá a saída a seguir na janela do console.
Sent a single message to the queue: myqueue Sent a batch of messages to the queue: myqueue Starting the processor Processing message. Session: 88d961dd801f449e9c3e0f8a5393a527, Sequence #: 1. Contents: Hello, World! Processing message. Session: e90c8d9039ce403bbe1d0ec7038033a0, Sequence #: 2. Contents: First message Processing message. Session: 311a216a560c47d184f9831984e6ac1d, Sequence #: 3. Contents: Second message Processing message. Session: f9a871be07414baf9505f2c3d466c4ab, Sequence #: 4. Contents: Third message Stopping and closing the processor
Na página Visão geral do namespace do Barramento de Serviço no portal do Azure, você poderá ver a contagem de mensagens de entrada e saída. Aguarde alguns minutos e atualize a página para ver os valores mais recentes.
Selecione a fila nesta página Visão geral para acessar a página Fila do Barramento de Serviço. Você também verá a contagem de mensagens de entrada e saída nessa página. Você também vê outras informações, como o tamanho atual da fila e o tamanho máximo da contagem de mensagens ativas.
Conteúdo relacionado
Confira os seguintes exemplos e a documentação: