com.azure.messaging.servicebus
A biblioteca de clientes Barramento de Serviço do Azure permite que os desenvolvedores java interajam com entidades Barramento de Serviço do Azure publicando em e/ou assinando de filas e tópicos/assinaturas. Barramento de Serviço do Microsoft Azure é um agente de mensagens de integração empresarial totalmente gerenciado. O Barramento de Serviço pode separar aplicativos e serviços. O Barramento de Serviço oferece uma plataforma confiável e segura para a transferência assíncrona de dados e estados. Os dados são transferidos entre diferentes aplicativos e serviços usando mensagens.
Conceitos Principais
- Fila : Permite o envio e o recebimento de mensagens, ordenadas primeiro a entrar no primeiro a sair (FIFO). Geralmente, ele é usado para comunicação ponto a ponto.
<li><strong>
<a href="https://docs.microsoft.com/azure/service-bus-messaging/service-bus-messaging-overview#topics">Topic</a>
:</strong> Allows for sending messages to multiple receivers, simultaneously. This is suited for publisher and
subscriber scenarios.</li>
<li><strong>
<a href="https://docs.microsoft.com/azure/service-bus-messaging/service-bus-queues-topics-subscriptions#topics-and-subscriptions">
Subscription</a>:</strong> Receives messages from a topic. Each subscription is independent and receives a
copy of every message sent to the topic. Each subscription has a filter. Filters, also known as rules, are
applied to each message to determine whether they will be published to the subscription.</li>
Introdução
Os clientes de serviço são o ponto de interação para os desenvolvedores usarem Hubs de Eventos do Azure. ServiceBusSenderClient e ServiceBusSenderAsyncClient são os clientes de sincronização e assíncronos para publicar mensagens em uma fila ou tópico do Barramento de Serviço. Da mesma forma, ServiceBusReceiverClient e ServiceBusReceiverAsyncClient são os clientes de sincronização e assíncronos para consumir mensagens de uma fila ou tópico do Barramento de Serviço. Em cenários de produção, recomendamos que os clientes aproveitem ServiceBusProcessorClient para consumir mensagens porque se recuperam de falhas transitórias.
Os exemplos mostrados neste documento usam um objeto de credencial chamado DefaultAzureCredential para autenticação, que é apropriado para a maioria dos cenários, incluindo ambientes locais de desenvolvimento e produção. Além disso, é recomendável usar a identidade gerenciada para autenticação em ambientes de produção. Você pode encontrar mais informações sobre diferentes maneiras de autenticação e seus tipos de credenciais correspondentes na documentação da Identidade do Azure.
Publicando mensagens do Barramento de Serviço
Essa biblioteca fornece dois clientes remetente para publicar mensagens em Barramento de Serviço do Azure. O cliente assíncrono ServiceBusSenderAsyncClient e sua versão de sincronização, ServiceBusSenderClient. Os exemplos abaixo demonstram cenários básicos, snippets adicionais podem ser encontrados na documentação da classe para ServiceBusClientBuilder e qualquer um dos clientes.
Exemplo: construir um remetente síncrono e enviar mensagens
O exemplo de código a seguir demonstra a criação e o uso do cliente ServiceBusSenderClient síncrono para enviar mensagens para uma fila. Quando o desempenho for importante, considere usar ServiceBusMessageBatch para publicar várias mensagens ao mesmo tempo.
TokenCredential credential = new DefaultAzureCredentialBuilder().build(); // 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net" ServiceBusSenderClient sender = new ServiceBusClientBuilder() .credential(fullyQualifiedNamespace, credential) .sender() .queueName(queueName) .buildClient(); List<ServiceBusMessage> messages = Arrays.asList( new ServiceBusMessage("test-1"), new ServiceBusMessage("test-2")); // Creating a batch without options set. ServiceBusMessageBatch batch = sender.createMessageBatch(); for (ServiceBusMessage message : messages) { if (batch.tryAddMessage(message)) { continue; } // The batch is full. Send the current batch and create a new one. sender.sendMessages(batch); batch = sender.createMessageBatch(); // Add the message we couldn't before. if (!batch.tryAddMessage(message)) { throw new IllegalArgumentException("Message is too large for an empty batch."); } } // Send the final batch if there are any messages in it. if (batch.getCount() > 0) { sender.sendMessages(batch); } // Continue using the sender and finally, dispose of the sender. // Clients should be long-lived objects as they require resources // and time to establish a connection to the service. sender.close();
Recebendo mensagens do Barramento de Serviço
Essa biblioteca fornece vários clientes para receber mensagens de Barramento de Serviço do Azure. O cliente assíncrono ServiceBusReceiverAsyncClient e sua versão de sincronização, ServiceBusReceiverClient. Para entidades habilitadas para sessão, há ServiceBusSessionReceiverAsyncClient e ServiceBusSessionReceiverClient. Em cenários de produção, ServiceBusProcessorClient é recomendável porque ele se recupera de erros transitórios, como falhas de rede temporárias.
Os exemplos abaixo demonstram cenários básicos, snippets adicionais podem ser encontrados na documentação da classe.
Exemplo: criar um ServiceBusProcessorClient e receber mensagens
O exemplo de código a seguir demonstra a criação e o uso do cliente ServiceBusProcessorClient síncrono para receber mensagens de uma fila do Barramento de Serviço. Por padrão, as mensagens são recebidas usando com.azure.messaging.servicebus.models.ServiceBusReceiveMode#PEEK_LOCK e os clientes devem liquidar suas mensagens usando um dos métodos de liquidação no cliente receptor. " "Liquidar operações de recebimento" fornece informações adicionais sobre a liquidação de mensagens. ServiceBusProcessorClient continua buscando mensagens da fila até que o processador seja interrompido. Se encontrar um erro transitório, ele tentará se recuperar e, em seguida, continuará processando mensagens.
// Function that gets called whenever a message is received. Consumer<ServiceBusReceivedMessageContext> processMessage = context -> { final ServiceBusReceivedMessage message = context.getMessage(); // Randomly complete or abandon each message. Ideally, in real-world scenarios, if the business logic // handling message reaches desired state such that it doesn't require Service Bus to redeliver // the same message, then context.complete() should be called otherwise context.abandon(). final boolean success = Math.random() < 0.5; if (success) { try { context.complete(); } catch (RuntimeException error) { System.out.printf("Completion of the message %s failed.%n Error: %s%n", message.getMessageId(), error); } } else { try { context.abandon(); } catch (RuntimeException error) { System.out.printf("Abandoning of the message %s failed.%nError: %s%n", message.getMessageId(), error); } } }; // Sample code that gets called if there's an error Consumer<ServiceBusErrorContext> processError = errorContext -> { if (errorContext.getException() instanceof ServiceBusException) { ServiceBusException exception = (ServiceBusException) errorContext.getException(); System.out.printf("Error source: %s, reason %s%n", errorContext.getErrorSource(), exception.getReason()); } else { System.out.printf("Error occurred: %s%n", errorContext.getException()); } }; TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build(); // Create the processor client via the builder and its sub-builder // 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net" ServiceBusProcessorClient processorClient = new ServiceBusClientBuilder() .credential(fullyQualifiedNamespace, tokenCredential) .processor() .queueName(queueName) .receiveMode(ServiceBusReceiveMode.PEEK_LOCK) .disableAutoComplete() // Make sure to explicitly opt in to manual settlement (e.g. complete, abandon). .processMessage(processMessage) .processError(processError) .disableAutoComplete() .buildProcessorClient(); // Starts the processor in the background. Control returns immediately. processorClient.start(); // Stop processor and dispose when done processing messages. processorClient.stop(); processorClient.close();
Exemplo: criar um receptor e receber mensagens
O exemplo de código a seguir demonstra a criação e o uso do cliente ServiceBusReceiverClient síncrono para receber mensagens de uma assinatura do Barramento de Serviço. A operação de recebimento retorna quando 10 mensagens são recebidas ou 30 segundos são decorridos. Por padrão, as mensagens são recebidas usando com.azure.messaging.servicebus.models.ServiceBusReceiveMode#PEEK_LOCK e os clientes devem liquidar suas mensagens usando um dos métodos de liquidação no cliente receptor. " "Liquidar operações de recebimento" fornece informações adicionais sobre a liquidação de mensagens.
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build(); // 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net" ServiceBusReceiverClient receiver = new ServiceBusClientBuilder() .credential(fullyQualifiedNamespace, tokenCredential) .receiver() .topicName(topicName) .subscriptionName(subscriptionName) .buildClient(); // Receives a batch of messages when 10 messages are received or until 30 seconds have elapsed, whichever // happens first. IterableStream<ServiceBusReceivedMessage> messages = receiver.receiveMessages(10, Duration.ofSeconds(30)); messages.forEach(message -> { System.out.printf("Id: %s. Contents: %s%n", message.getMessageId(), message.getBody()); // If able to process message, complete it. Otherwise, abandon it and allow it to be // redelivered. if (isMessageProcessed) { receiver.complete(message); } else { receiver.abandon(message); } }); // When program ends, or you're done receiving all messages, dispose of the receiver. // Clients should be long-lived objects as they // require resources and time to establish a connection to the service. receiver.close();
Service |
Essa classe fornece uma API de construtor fluente para auxiliar na instanciação de clientes para enviar e receber mensagens de/para entidades do Barramento de Serviço. |
Service |
Construtor para criar ServiceBusProcessorClient para consumir mensagens de uma entidade do Barramento de Serviço. |
Service |
Construtor para criar ServiceBusReceiverClient e ServiceBusReceiverAsyncClient consumir mensagens do Barramento de Serviço. |
Service |
Construtor para criar ServiceBusRuleManagerAsyncClient para gerenciar regras de assinatura do Barramento de Serviço. |
Service |
Construtor para criar ServiceBusSenderClient e ServiceBusSenderAsyncClient publicar mensagens no Barramento de Serviço. |
Service |
Construtor para criar ServiceBusProcessorClient para consumir mensagens de uma entidade do Barramento de Serviço baseada em sessão. |
Service |
Construtor para criar ServiceBusReceiverClient e ServiceBusReceiverAsyncClient consumir mensagens de uma entidade do Barramento de Serviço com reconhecimento de sessão . |
Service |
Uma classe de utilitário que analisa um cadeia de conexão em seções. |
Service |
Contexto para erros tratados pelo ServiceBusProcessorClient. |
Service |
Representa a operação que um cliente do Barramento de Serviço estava executando quando o erro aconteceu. |
Service |
Exceção que contém informações adicionais sobre a operação que causou o erro. |
Service |
O conjunto de motivos conhecidos para uma falha de operação do Barramento de Serviço que foi a causa de uma exceção. |
Service |
A estrutura de dados que encapsula a mensagem que está sendo enviada ao Barramento de Serviço. |
Service |
Uma classe para agregar ServiceBusMessage em um lote único, limitado por tamanho. |
Service |
O cliente do processador para processar mensagens do Barramento de Serviço. |
Service |
A estrutura de dados que encapsula a mensagem recebida do Barramento de Serviço. |
Service |
O contexto de mensagem do processador do Barramento de Serviço que contém uma mensagem recebida e métodos adicionais para resolver a mensagem. |
Service |
Um receptor assíncrono responsável por receber ServiceBusReceivedMessage de uma fila de Barramento de Serviço do Azure ou tópico/assinatura. |
Service |
Um receptor síncrono responsável por receber ServiceBusReceivedMessage de uma fila ou tópico/assinatura em Barramento de Serviço do Azure. |
Service |
Um gerenciador de regras assíncrono responsável por gerenciar regras para uma assinatura de tópico específica. |
Service |
Um gerenciador de regras síncrona responsável pelo gerenciamento de regras para uma assinatura de tópico específica. |
Service |
Um cliente assíncrono para enviar mensagens para um recurso do Barramento de Serviço. |
Service |
Um remetente síncrono responsável por enviar ServiceBusMessage para uma fila ou tópico no Barramento de Serviço do Azure. |
Service |
Esse cliente receptor de sessão assíncrona é usado para adquirir bloqueios de sessão de uma fila ou tópico e criar ServiceBusReceiverAsyncClient instâncias vinculadas às sessões bloqueadas. |
Service |
Esse cliente receptor de sessão síncrona é usado para adquirir bloqueios de sessão de uma fila ou tópico e criar ServiceBusReceiverClient instâncias vinculadas às sessões bloqueadas. |
Service |
Representa a transação no serviço. |
Service |
As versões do Barramento de Serviço do Azure compatíveis com essa biblioteca de clientes. |
Comentários do Azure SDK for Java
O Azure SDK for Java é um projeto código aberto. Selecione um link para fornecer comentários: