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.
Neste Guia de início rápido, você aprenderá a enviar e receber eventos de um hub de eventos do Azure usando o pacote Java azure-messaging-eventhubs .
Sugestão
Se você estiver trabalhando com recursos de Hubs de Eventos do Azure em um aplicativo Spring, recomendamos que considere o Spring Cloud Azure como uma alternativa. O Spring Cloud Azure é um projeto de código aberto 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 Hubs de Eventos, consulte Spring Cloud Stream com Hubs de Eventos do Azure.
Pré-requisitos
Se você é novo nos Hubs de Eventos do Azure, consulte Visão geral dos Hubs de Eventos antes de fazer este início rápido.
Para concluir este início rápido, você precisa dos seguintes pré-requisitos:
- Subscrição do Microsoft Azure. Para usar os serviços do Azure, incluindo os Hubs de Eventos do Azure, você precisa de uma assinatura. Se você não tiver uma conta existente do Azure, poderá se inscrever para uma avaliação gratuita ou usar seus benefícios de assinante do MSDN ao criar uma conta.
- Um ambiente de desenvolvimento Java. Este guia de início rápido usa Eclipse. É necessário o Java Development Kit (JDK) com versão 8 ou superior.
- Crie um namespace de Hubs de Eventos e um hub de eventos. A primeira etapa é usar o portal do Azure para criar um namespace do tipo Hubs de Eventos e obter as credenciais de gerenciamento de que seu aplicativo precisa para se comunicar com o hub de eventos. Para criar um namespace e um hub de eventos, siga o procedimento neste artigo. Em seguida, obtenha a cadeia de conexão para o namespace Hubs de Eventos seguindo as instruções do artigo: Obter cadeia de conexão. Use a cadeia de conexão posteriormente neste início rápido.
Enviar eventos
Esta seção mostra como criar um aplicativo Java para enviar eventos a um hub de eventos.
Adicionar referência à biblioteca de Hubs de Eventos do Azure
Primeiro, crie um novo projeto Maven para um aplicativo de console/shell em seu ambiente de desenvolvimento Java favorito. Atualize o pom.xml
arquivo da seguinte maneira. A biblioteca de cliente Java para Hubs de Eventos está disponível no Repositório Central do Maven.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.20.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.16.1</version>
<scope>compile</scope>
</dependency>
Observação
Atualize a versão para a versão mais recente publicada no repositório Maven.
Autenticar o aplicativo no Azure
Este guia de início rápido mostra duas maneiras de se conectar aos Hubs de Eventos do Azure:
- Autenticação sem senha. Use 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 de Hubs de Eventos. Você não precisa se preocupar em ter cadeias de conexão codificadas em seu código, em um arquivo de configuração ou em armazenamento seguro, como o Azure Key Vault.
- Cadeia de conexão. Use uma cadeia de conexão para se conectar a um namespace de Hubs de Eventos. 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 e Conexões sem senha para serviços do Azure.
Atribuir funções ao usuário do Microsoft Entra
Ao desenvolver localmente, verifique se a conta de usuário que se conecta aos Hubs de Eventos do Azure tem as permissões corretas. Você precisa da função Proprietário de Dados dos Hubs de Eventos 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 obter mais informações, consulte Entender o escopo da página RBAC do Azure .
O exemplo a seguir atribui a Azure Event Hubs Data Owner
função à sua conta de usuário, que fornece acesso total aos recursos dos Hubs de Eventos 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 incorporadas do Azure para Hubs de Eventos do Azure
Para Hubs de Eventos 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 para autorizar o acesso a um namespace de Hubs de Eventos:
- Proprietário de Dados dos Hubs de Eventos do Azure: habilita o acesso aos dados ao namespace dos Hubs de Eventos e suas entidades (filas, tópicos, assinaturas e filtros).
- Remetente de Dados dos Hubs de Eventos do Azure: use essa função para dar ao remetente acesso ao namespace dos Hubs de Eventos e suas entidades.
- Recetor de Dados dos Hubs de Eventos do Azure: use essa função para dar ao recetor acesso ao namespace dos Hubs de Eventos e suas entidades.
Se quiser criar uma função personalizada, consulte Direitos necessários para operações de Hubs de Eventos.
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.
No portal do Azure, localize seu namespace de Hubs de Eventos usando a barra de pesquisa principal ou a navegação à esquerda.
Na página de visão geral, selecione Controle de acesso (IAM) no menu à esquerda.
Na página Controlo de acesso (IAM), selecione o separador Atribuição de funções.
Selecione + Adicionar no menu superior. Em seguida, selecione 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 Event Hubs Data Owner
e selecione o resultado correspondente. Em seguida, escolha Avançar.Em Atribuir acesso a, selecione Usuário, grupo ou entidade de serviço. Em seguida, escolha + Selecionar membros.
Na caixa de diálogo, procure o seu nome de utilizador do Microsoft Entra (normalmente o seu endereço de e-mail user@domain ). Escolha Selecionar na parte inferior da caixa de diálogo.
Selecione Rever + atribuir para aceder à página final. Selecione Rever + atribuir novamente para concluir o processo.
Escrever código para enviar mensagens para o hub de eventos
Adicione uma classe chamada Sender
, e adicione o seguinte código à classe:
Importante
- Atualize
<NAMESPACE NAME>
com o nome do namespace dos Hubs de Eventos. - Atualize
<EVENT HUB NAME>
com o nome do seu hub de eventos.
package ehubquickstart;
import com.azure.messaging.eventhubs.*;
import java.util.Arrays;
import java.util.List;
import com.azure.identity.*;
public class SenderAAD {
// replace <NAMESPACE NAME> with the name of your Event Hubs namespace.
// Example: private static final String namespaceName = "contosons.servicebus.windows.net";
private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net";
// Replace <EVENT HUB NAME> with the name of your event hub.
// Example: private static final String eventHubName = "ordersehub";
private static final String eventHubName = "<EVENT HUB NAME>";
public static void main(String[] args) {
publishEvents();
}
/**
* Code sample for publishing events.
* @throws IllegalArgumentException if the EventData is bigger than the max batch size.
*/
public static void publishEvents() {
// create a token using the default Azure credential
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
.build();
// create a producer client
EventHubProducerClient producer = new EventHubClientBuilder()
.fullyQualifiedNamespace(namespaceName)
.eventHubName(eventHubName)
.credential(credential)
.buildProducerClient();
// sample events in an array
List<EventData> allEvents = Arrays.asList(new EventData("Foo"), new EventData("Bar"));
// create a batch
EventDataBatch eventDataBatch = producer.createBatch();
for (EventData eventData : allEvents) {
// try to add the event from the array to the batch
if (!eventDataBatch.tryAdd(eventData)) {
// if the batch is full, send it and then create a new batch
producer.send(eventDataBatch);
eventDataBatch = producer.createBatch();
// Try to add that event that couldn't fit before.
if (!eventDataBatch.tryAdd(eventData)) {
throw new IllegalArgumentException("Event is too large for an empty batch. Max size: "
+ eventDataBatch.getMaxSizeInBytes());
}
}
}
// send the last batch of remaining events
if (eventDataBatch.getCount() > 0) {
producer.send(eventDataBatch);
}
producer.close();
}
}
Crie o programa e certifique-se de que não há erros. Você executará este programa depois de executar o programa recetor.
Receber eventos
O código neste tutorial é baseado no exemplo EventProcessorClient no GitHub, que você pode examinar para ver o aplicativo de trabalho completo.
Siga estas recomendações ao usar o Armazenamento de Blobs do Azure como um armazenamento de ponto de verificação:
- Use um contêiner separado para cada grupo de consumidores. Você pode usar a mesma conta de armazenamento, mas usar um contêiner por cada grupo.
- Não use a conta de armazenamento para mais nada.
- Não use o recipiente para mais nada.
- Crie a conta de armazenamento na mesma região do aplicativo implantado. Se a aplicação for local, tente escolher a região mais próxima possível.
Na página Conta de armazenamento no portal do Azure, na seção Serviço de Blob, verifique se as configurações a seguir estão desabilitadas.
- Espaço de nomes hierárquico
- Eliminação de forma recuperável de blobs
- Gestão de Versões
Criar um Armazenamento Azure e um contentor de blob
Neste início rápido, você usa o Armazenamento do Azure (especificamente, Armazenamento de Blob) como o armazenamento de ponto de verificação. Checkpointing é um processo pelo qual um processador de eventos marca ou confirma a posição do último evento processado com sucesso dentro de uma partição. A marcação de um ponto de verificação normalmente é feita dentro da função que processa os eventos. Para saber mais sobre pontos de verificação, consulte Processador de eventos.
Siga estas etapas para criar uma conta de Armazenamento do Azure.
- Criar uma conta de Armazenamento do Azure
- Criar um contêiner de blob
- Autenticar o acesso ao contêiner de blob
Ao desenvolver localmente, certifique-se de que a conta de usuário que acessa os dados de blob tenha as permissões corretas. Você precisa do Storage Blob Data Contributor para ler e gravar dados de blob. Para atribuir essa função a si mesmo, você precisa receber a função de Administrador de Acesso de Usuário ou outra função que inclua a ação Microsoft.Authorization/roleAssignments/write . 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 obter mais informações, consulte Entender o escopo do Azure RBAC.
Nesse cenário, você atribui permissões à sua conta de usuário, com escopo para a conta de armazenamento, para seguir o Princípio do Menor Privilégio. Essa prática oferece aos usuários apenas as permissões mínimas necessárias e cria ambientes de produção mais seguros.
O exemplo a seguir atribui a função de Colaborador de Dados de Blob de Armazenamento à sua conta de usuário, que fornece acesso de leitura e gravação aos dados de blob em sua conta de armazenamento.
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.
No portal do Azure, localize sua conta de armazenamento usando a barra de pesquisa principal ou a navegação à esquerda.
Na página da conta de armazenamento, selecione Controle de acesso (IAM) no menu à esquerda.
Na página Controlo de acesso (IAM), selecione o separador Atribuição de funções.
Selecione + Adicionar no menu superior. Em seguida, selecione Adicionar atribuição de função.
Use a caixa de pesquisa para filtrar os resultados para a função desejada. Para este exemplo, procure por Storage Blob Data Contributor. Selecione o resultado correspondente e, 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. Selecione Rever + atribuir novamente para concluir o processo.
Adicionar bibliotecas de Hubs de Eventos ao seu projeto Java
Adicione as seguintes dependências no arquivo pom.xml.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.20.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
<version>1.20.6</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.16.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
Adicione as seguintes
import
instruções na parte superior do arquivo Java.import com.azure.messaging.eventhubs.*; import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore; import com.azure.messaging.eventhubs.models.*; import com.azure.storage.blob.*; import java.util.function.Consumer; import com.azure.identity.*;
Crie uma classe chamada
Receiver
, e adicione as seguintes variáveis de cadeia de caracteres à classe. Substitua os marcadores de posição pelos valores corretos.Importante
Substitua os marcadores de posição pelos valores corretos.
-
<NAMESPACE NAME>
com o nome do seu namespace de Event Hubs. -
<EVENT HUB NAME>
com o nome do seu hub de eventos no namespace.
private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net"; private static final String eventHubName = "<EVENT HUB NAME>";
-
Adicione o seguinte
main
método à classe.Importante
Substitua os marcadores de posição pelos valores corretos.
-
<STORAGE ACCOUNT NAME>
com o nome da sua conta de Armazenamento do Azure. -
<CONTAINER NAME>
com o nome do contêiner de blob na conta de armazenamento
// create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD) .build(); // Create a blob container client that you use later to build an event processor client to receive and process events BlobContainerAsyncClient blobContainerAsyncClient = new BlobContainerClientBuilder() .credential(credential) .endpoint("https://<STORAGE ACCOUNT NAME>.blob.core.windows.net") .containerName("<CONTAINER NAME>") .buildAsyncClient(); // Create an event processor client to receive and process events and errors. EventProcessorClient eventProcessorClient = new EventProcessorClientBuilder() .fullyQualifiedNamespace(namespaceName) .eventHubName(eventHubName) .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME) .processEvent(PARTITION_PROCESSOR) .processError(ERROR_HANDLER) .checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient)) .credential(credential) .buildEventProcessorClient(); System.out.println("Starting event processor"); eventProcessorClient.start(); System.out.println("Press enter to stop."); System.in.read(); System.out.println("Stopping event processor"); eventProcessorClient.stop(); System.out.println("Event processor stopped."); System.out.println("Exiting process");
-
Adicione os dois métodos auxiliares (
PARTITION_PROCESSOR
eERROR_HANDLER
) que processam eventos e erros àReceiver
classe.public static final Consumer<EventContext> PARTITION_PROCESSOR = eventContext -> { PartitionContext partitionContext = eventContext.getPartitionContext(); EventData eventData = eventContext.getEventData(); System.out.printf("Processing event from partition %s with sequence number %d with body: %s%n", partitionContext.getPartitionId(), eventData.getSequenceNumber(), eventData.getBodyAsString()); // Every 10 events received, it will update the checkpoint stored in Azure Blob Storage. if (eventData.getSequenceNumber() % 10 == 0) { eventContext.updateCheckpoint(); } }; public static final Consumer<ErrorContext> ERROR_HANDLER = errorContext -> { System.out.printf("Error occurred in partition processor for partition %s, %s.%n", errorContext.getPartitionContext().getPartitionId(), errorContext.getThrowable()); };
Crie o programa e certifique-se de que não há erros.
Executar as aplicações
Execute primeiro a aplicação Receiver .
Em seguida, execute o aplicativo Sender .
Na janela do aplicativo Recetor , confirme se você vê os eventos que foram publicados pelo aplicativo Remetente.
Starting event processor Press enter to stop. Processing event from partition 0 with sequence number 331 with body: Foo Processing event from partition 0 with sequence number 332 with body: Bar
Pressione ENTER na janela do aplicativo recetor para parar o aplicativo.
Starting event processor Press enter to stop. Processing event from partition 0 with sequence number 331 with body: Foo Processing event from partition 0 with sequence number 332 with body: Bar Stopping event processor Event processor stopped. Exiting process
Conteúdo relacionado
Veja os seguintes exemplos no GitHub: