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.
Neste Início Rápido, você aprenderá a enviar eventos e receber eventos de um hub de eventos usando o pacote python do azure-eventhub .
Pré-requisitos
Se você estiver conhecendo agora os Hubs de Eventos do Azure, confira Visão geral dos Hubs de Eventos antes de prosseguir com este início rápido.
Para concluir este início rápido, verifique se você tem os seguintes pré-requisitos:
- Assinatura do Microsoft Azure: inscreva-se para uma avaliação gratuita se você não tiver uma.
- Python 3.8 ou posterior: verifique se o pip está instalado e atualizado.
- Visual Studio Code (recomendado): ou use qualquer outro IDE de sua escolha.
- Namespace e hub de eventos do Event Hubs: siga este guia para criá-los no portal do Azure.
Instalar os pacotes para enviar eventos
Para instalar os pacotes do Python para Hubs de Eventos, abra um prompt de comando que tenha Python no caminho. Altere o diretório para a pasta em que você deseja manter os exemplos.
pip install azure-eventhub
pip install azure-identity
pip install aiohttp
Autenticar o aplicativo no Azure
Este início rápido mostra duas maneiras de se conectar aos Hubs de Eventos do Azure:
- Sem senha. Use sua entidade de segurança no Microsoft Entra ID e o controle de acesso baseado em função (RBAC) para se conectar a um namespace do Hubs de Eventos. Você não precisa se preocupar em ter cadeias de conexão codificadas em código em seu código, em um arquivo de configuração ou em um armazenamento seguro, como o Azure Key Vault.
- Cadeia de conexão. Use uma cadeia de conexão para se conectar a um namespace dos Hubs de Eventos. 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 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, 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 obter mais informações, consulte Noções básicas sobre o escopo da página RBAC do Azure .
O exemplo a seguir atribui a função Azure Event Hubs Data Owner
à sua conta de usuário, que fornece acesso completo aos recursos dos Hubs de Eventos do Azure. Em um cenário real, siga o Princípio do Privilégio Mínimo para dar aos usuários apenas as permissões mínimas necessárias para um ambiente de produção mais seguro.
Funções interna do Azure par Hubs de Eventos do Azure
Para os Hubs de Eventos 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 seguintes funções internas para autorizar o acesso a um namespace dos Hubs de Eventos:
- Proprietário de Dados dos Hubs de Eventos do Azure: Habilita o acesso a dados ao namespace do 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 fornecer acesso de remetente ao namespace dos Hubs de Eventos e às respectivas entidades.
- Destinatário de Dados dos Hubs de Eventos do Azure: use essa função para fornecer acesso de remetente ao namespace dos Hubs de Eventos e às respectivas entidades.
Se você quiser criar uma função personalizada, confira Direitos exigidos para operações dos Hubs de Eventos.
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 levar até oito minutos. Se você receber erros de autenticação ao executar o código pela primeira vez, aguarde alguns instantes e tente novamente.
No portal do Azure, localize o namespace dos 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 Controle de acesso (IAM), selecione a guia Atribuições de função.
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. Neste exemplo, pesquise
Azure Event Hubs Data Owner
e selecione o resultado correspondente. Em seguida, escolha Avançar.Em Atribuir acesso, selecione Usuário, grupo ou entidade de serviço. Em seguida, escolha + Selecionar membros.
Na caixa de diálogo, pesquise seu nome de usuário do Microsoft Entra (geralmente seu endereço de email user@___domain ). Escolha Selecionar na parte inferior da caixa de diálogo.
Selecione Examinar + atribuir para ir para a página final. Selecione Examinar + atribuir novamente para concluir o processo.
Enviar eventos
Nesta seção, crie um script Python para enviar eventos para o hub de eventos que você criou anteriormente.
Abra seu editor favorito do Python, como o Visual Studio Code.
Crie um script chamado send.py. Esse script envia um lote de eventos para o hub de eventos que você criou anteriormente.
Cole o seguinte código em sender.py:
No código, use valores reais para substituir os seguintes espaços reservados:
-
EVENT_HUB_FULLY_QUALIFIED_NAMESPACE
- Você pode ver o nome totalmente qualificado na página Visão geral do namespace. Ele deve estar no formato:<NAMESPACENAME>>.servicebus.windows.net
. -
EVENT_HUB_NAME
- Nome do hub de eventos.
import asyncio from azure.eventhub import EventData from azure.eventhub.aio import EventHubProducerClient from azure.identity.aio import DefaultAzureCredential EVENT_HUB_FULLY_QUALIFIED_NAMESPACE = "EVENT_HUB_FULLY_QUALIFIED_NAMESPACE" EVENT_HUB_NAME = "EVENT_HUB_NAME" credential = DefaultAzureCredential() async def run(): # Create a producer client to send messages to the event hub. # Specify a credential that has correct role assigned to access # event hubs namespace and the event hub name. producer = EventHubProducerClient( fully_qualified_namespace=EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, eventhub_name=EVENT_HUB_NAME, credential=credential, ) print("Producer client created successfully.") async with producer: # Create a batch. event_data_batch = await producer.create_batch() # Add events to the batch. event_data_batch.add(EventData("First event ")) event_data_batch.add(EventData("Second event")) event_data_batch.add(EventData("Third event")) # Send the batch of events to the event hub. await producer.send_batch(event_data_batch) # Close credential when no longer needed. await credential.close() asyncio.run(run())
Observação
Para obter exemplos de outras opções para enviar eventos para um hub de eventos de forma assíncrona usando uma cadeia de conexão, consulte a página send_async.py GitHub. Os padrões mostrados também são aplicáveis ao envio de eventos sem senha.
-
Receber eventos
Este início rápido usa o Armazenamento de Blobs do Azure como um repositório de pontos de verificação. O repositório de pontos de verificação é usado para persistir pontos de verificação (ou seja, as últimas posições de leitura).
Siga estas recomendações ao usar o Armazenamento de Blobs do Azure como um repositório 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 contêiner para mais nada.
- Crie a conta de armazenamento na mesma região que o aplicativo implantado. Se o aplicativo for local, tente escolher a região mais próxima possível.
Na página Conta de armazenamento do portal do Azure, na seção serviço Blob, verifique se as seguintes configurações estão desabilitadas.
- Namespace hierárquico
- Exclusão temporária de blobs
- Controle de versão
Criar uma conta de armazenamento e um contêiner de blobs do Azure
Crie uma conta de armazenamento do Azure e um contêiner de blobs nela executando as seguintes etapas:
- Crie uma conta de Armazenamento do Azure
- Criar um contêiner de blob.
- Autenticar no contêiner de blob.
Registre a cadeia de conexão e o nome do contêiner para usá-los posteriormente no código de recebimento.
Ao desenvolver localmente, verifique se a conta de usuário que acessa dados de blob tem as permissões corretas. Você precisa de Colaborador de Dados de Blob de Armazenamento para ler e gravar dados de blob. Para atribuir essa função a si mesmo, você precisa receber a função Administrador de Acesso de Usuário, ou 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 obter mais informações, confira 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 Privilégio Mínimo. Essa prática fornece 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 Colaborador de Dados de Blob de Armazenamento à sua conta de usuário, o que fornece acesso de leitura e gravação aos dados de blob na sua conta de armazenamento.
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 levar até oito minutos. Se você receber erros de autenticação ao executar o código pela primeira vez, aguarde alguns instantes 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 Controle de acesso (IAM), selecione a guia Atribuições de função.
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, pesquise Colaborador de Dados de Blob de Armazenamento. Selecione o resultado correspondente e escolha Próximo.
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 Examinar + atribuir para ir para a página final. Selecione Examinar + atribuir novamente para concluir o processo.
Instalar os pacotes para receber eventos
Para o lado receptor, será necessário instalar mais dois pacotes. Neste início rápido, você usará o Armazenamento de Blobs do Azure para persistir pontos de verificação para que o programa não leia os eventos que ele já leu. Ele executa pontos de verificação de metadados em mensagens recebidas em intervalos regulares em um blob. Essa abordagem facilita continuar a receber mensagens mais tarde exatamente do ponto em que você parou.
pip install azure-eventhub-checkpointstoreblob-aio
pip install azure-identity
Criar um script do Python para receber eventos
Nesta seção, você criará um script Python para receber eventos do hub de eventos:
Abra seu editor favorito do Python, como o Visual Studio Code.
Crie um script chamado recv.py.
Cole o seguinte código em recv.py:
No código, use valores reais para substituir os seguintes espaços reservados:
-
BLOB_STORAGE_ACCOUNT_URL
- Esse valor deve estar no formato:https://<YOURSTORAGEACCOUNTNAME>.blob.core.windows.net/
-
BLOB_CONTAINER_NAME
- Nome do contêiner de blob na conta de armazenamento do Azure. -
EVENT_HUB_FULLY_QUALIFIED_NAMESPACE
- Você pode ver o nome totalmente qualificado na página Visão geral do namespace. Ele deve estar no formato:<NAMESPACENAME>>.servicebus.windows.net
. -
EVENT_HUB_NAME
- Nome do hub de eventos.
import asyncio from azure.eventhub.aio import EventHubConsumerClient from azure.eventhub.extensions.checkpointstoreblobaio import ( BlobCheckpointStore, ) from azure.identity.aio import DefaultAzureCredential BLOB_STORAGE_ACCOUNT_URL = "BLOB_STORAGE_ACCOUNT_URL" BLOB_CONTAINER_NAME = "BLOB_CONTAINER_NAME" EVENT_HUB_FULLY_QUALIFIED_NAMESPACE = "EVENT_HUB_FULLY_QUALIFIED_NAMESPACE" EVENT_HUB_NAME = "EVENT_HUB_NAME" credential = DefaultAzureCredential() async def on_event(partition_context, event): # Print the event data. print( 'Received the event: "{}" from the partition with ID: "{}"'.format( event.body_as_str(encoding="UTF-8"), partition_context.partition_id ) ) # Update the checkpoint so that the program doesn't read the events # that it has already read when you run it next time. await partition_context.update_checkpoint(event) async def main(): # Create an Azure blob checkpoint store to store the checkpoints. checkpoint_store = BlobCheckpointStore( blob_account_url=BLOB_STORAGE_ACCOUNT_URL, container_name=BLOB_CONTAINER_NAME, credential=credential, ) # Create a consumer client for the event hub. client = EventHubConsumerClient( fully_qualified_namespace=EVENT_HUB_FULLY_QUALIFIED_NAMESPACE, eventhub_name=EVENT_HUB_NAME, consumer_group="$Default", checkpoint_store=checkpoint_store, credential=credential, ) async with client: # Call the receive method. Read from the beginning of the partition # (starting_position: "-1") await client.receive(on_event=on_event, starting_position="-1") # Close credential when no longer needed. await credential.close() if __name__ == "__main__": # Run the main method. asyncio.run(main())
Observação
Para obter exemplos de outras opções para receber eventos de um hub de eventos de forma assíncrona usando uma cadeia de conexão, consulte a página recv_with_checkpoint_store_async.py GitHub. Os padrões mostrados também são aplicáveis ao recebimento de eventos sem senha.
-
Executar o aplicativo receptor
Inicie um prompt de comando.
Execute o comando a seguir e faça login usando a conta que foi adicionada à função de Proprietário dos Dados do Azure Event Hubs no namespace do Event Hubs e à função de Contribuidor de Dados de Blob de Armazenamento na conta de armazenamento do Azure.
az login
Alterne para a pasta que tem o arquivo receive.py e execute o seguinte comando:
python recv.py
Executar o aplicativo remetente
Inicie um prompt de comando.
Execute o comando a seguir e faça login usando a conta que foi adicionada à função de Proprietário dos Dados do Azure Event Hubs no namespace do Event Hubs e à função de Contribuidor de Dados de Blob de Armazenamento na conta de armazenamento do Azure.
az login
Vá para a pasta que contém o send.py e então execute este comando:
python send.py
A janela do destinatário deve exibir as mensagens que foram enviadas para o hub de eventos.
Solução de problemas
Se você não vir eventos na janela do receptor ou o código relatar um erro, tente as seguintes dicas de solução de problemas:
Se você não vir os resultados de recy.py, execute send.py várias vezes.
Se você vir erros sobre "corrotina" ao usar o código sem senha (com credenciais), verifique se está usando a importação de
azure.identity.aio
.Se você vir "Sessão de cliente não revelada" com código sem senha (com credenciais), lembre-se de fechar a credencial quando terminar. Para saber mais, confira Credenciais assíncronas.
Se você vir erros de autorização com recv.py ao acessar o armazenamento, verifique se seguiu as etapas em Criar uma conta de armazenamento do Azure e um contêiner de blobs e atribuiu a função Colaborador de Dados de Blob de Armazenamento à entidade de serviço.
Se você receber eventos com IDs de partição diferentes, esse resultado é esperado. As partições são um mecanismo de organização de dados relacionados ao paralelismo de downstream necessário no consumo de aplicativos. O número de partições em um hub de eventos está diretamente relacionado ao número de leitores simultâneos que você espera ter. Para obter mais informações, confira Saiba mais sobre partições.
Próximas etapas
Neste início rápido, você enviou e recebeu eventos de forma assíncrona. Para saber como enviar e receber eventos de maneira síncrona, acesse a página sync_samples do GitHub.
Explore mais exemplos e cenários avançados na biblioteca de clientes dos Hubs de Eventos do Azure para exemplos do Python.