Envío o recepción de eventos en Event Hubs mediante PythonSend events to or receive events from Event Hubs using Python

Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran escalabilidad capaz de recibir y procesar millones de eventos por segundo.Azure Event Hubs is a Big Data streaming platform and event ingestion service, capable of receiving and processing millions of events per second. Event Hubs puede procesar y almacenar eventos, datos o telemetría generados por dispositivos y software distribuido.Event Hubs can process and store events, data, or telemetry produced by distributed software and devices. Los datos enviados a un centro de eventos se pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o adaptadores de procesamiento por lotes y almacenamiento.Data sent to an event hub can be transformed and stored using any real-time analytics provider or batching/storage adapters. Para más información sobre Event Hubs, consulte Introducción a Event Hubs y Características de Event Hubs.For detailed overview of Event Hubs, see Event Hubs overview and Event Hubs features.

En este tutorial se describe cómo crear aplicaciones de Python para enviar o recibir eventos en un centro de eventos.This tutorial describes how to create Python applications to send events to or receive events from an event hub.

Nota

Puede descargar esta guía de inicio rápido como un ejemplo desde GitHub, reemplazar las cadenas EventHubConnectionString y EventHubName por los valores del centro de eventos, y ejecutarlo.You can download this quickstart as a sample from the GitHub, replace EventHubConnectionString and EventHubName strings with your event hub values, and run it. También puede seguir los pasos de este tutorial para crear el suyo propio.Alternatively, you can follow the steps in this tutorial to create your own.

Requisitos previosPrerequisites

Para completar este tutorial, debe cumplir los siguientes requisitos previos:To complete this tutorial, you need the following prerequisites:

  • Una suscripción de Azure.An Azure subscription. Si no tiene una, cree una cuenta gratuita antes de empezar.If you don't have one, create a free account before you begin.
  • Python 3.4 o versiones posteriores.Python 3.4 or later.
  • Use Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de administración que la aplicación necesita para comunicarse con el centro de eventos.Use the Azure portal to create a namespace of type Event Hubs, and obtain the management credentials your application needs to communicate with the event hub. Para crear un espacio de nombres y un centro de eventos, siga el procedimiento que se indica en este artículo.To create a namespace and an event hub, follow the procedure in this article. Luego, para obtener el valor de la clave de acceso del centro de eventos, siga las instrucciones del artículo: Obtenga la cadena de conexión.Then, get the value of access key for the event hub by following instructions from the article: Get connection string. Utilice la clave de acceso en el código que escriba más adelante en este tutorial.You use the access key in the code you write later in this tutorial. El nombre de la clave predeterminada es: RootManageSharedAccessKey.The default key name is: RootManageSharedAccessKey.

Instalación del paquete de PythonInstall Python package

Para instalar el paquete de Python correspondiente a Event Hubs, abra un símbolo del sistema que tenga Python en su ruta de acceso y, después, ejecute el siguiente comando:To install the Python package for Event Hubs, open a command prompt that has Python in its path, and then run this command:

pip install azure-eventhub

Envío de eventosSend events

Creación de un script de Python para enviar eventosCreate a Python script to send events

A continuación, cree una aplicación de Python que envíe eventos a un centro de eventos:Next, create a Python application that sends events to an event hub:

  1. Abra el editor de Python que prefiera, como Visual Studio Code.Open your favorite Python editor, such as Visual Studio Code
  2. Cree un script llamado send.py.Create a script called send.py. Este script envía 100 eventos a un centro de eventos.This script sends 100 events to your event hub.
  3. Pegue el código siguiente en recv.py, reemplazando los valores ADDRESS, USER y KEY con los que obtuvo de Azure Portal en la sección anterior:Paste the following code into send.py, replacing the ADDRESS, USER, and KEY values with the values you obtained from the Azure portal in the previous section:
import sys
import logging
import datetime
import time
import os

from azure.eventhub import EventHubClient, Sender, EventData

logger = logging.getLogger("azure")

# Address can be in either of these formats:
# "amqps://<URL-encoded-SAS-policy>:<URL-encoded-SAS-key>@<mynamespace>.servicebus.windows.net/myeventhub"
# "amqps://<mynamespace>.servicebus.windows.net/myeventhub"
# For example:
ADDRESS = "amqps://mynamespace.servicebus.windows.net/myeventhub"

# SAS policy and key are not required if they are encoded in the URL
USER = "RootManageSharedAccessKey"
KEY = "namespaceSASKey"

try:
    if not ADDRESS:
        raise ValueError("No EventHubs URL supplied.")

    # Create Event Hubs client
    client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
    sender = client.add_sender(partition="0")
    client.run()
    try:
        start_time = time.time()
        for i in range(100):
            print("Sending message: {}".format(i))
            sender.send(EventData(str(i)))
    except:
        raise
    finally:
        end_time = time.time()
        client.stop()
        run_time = end_time - start_time
        logger.info("Runtime: {} seconds".format(run_time))

except KeyboardInterrupt:
    pass

Ejecución de la aplicación para enviar eventosRun application to send events

Para ejecutar el script, abra un símbolo del sistema que tenga Python en su ruta de acceso y, después, ejecute el siguiente comando:To run the script, open a command prompt that has Python in its path, and then run this command:

start python send.py

Felicidades.Congratulations! Ha enviado mensajes a un centro de eventos.You have now sent messages to an event hub.

Recepción de eventosReceive events

Creación de un script de Python para recibir eventosCreate a Python script to receive events

A continuación, cree una aplicación de Python que reciba eventos de un centro de eventos:Next, create a Python application that receives events from an event hub:

  1. Abra el editor de Python que prefiera, como Visual Studio Code.Open your favorite Python editor, such as Visual Studio Code
  2. Cree un script llamado recv.py.Create a script called recv.py.
  3. Pegue el código siguiente en recv.py, reemplazando los valores ADDRESS, USER y KEY con los que obtuvo de Azure Portal en la sección anterior:Paste the following code into recv.py, replacing the ADDRESS, USER, and KEY values with the values you obtained from the Azure portal in the previous section:
import os
import sys
import logging
import time
from azure.eventhub import EventHubClient, Receiver, Offset

logger = logging.getLogger("azure")

# Address can be in either of these formats:
# "amqps://<URL-encoded-SAS-policy>:<URL-encoded-SAS-key>@<mynamespace>.servicebus.windows.net/myeventhub"
# "amqps://<mynamespace>.servicebus.windows.net/myeventhub"
# For example:
ADDRESS = "amqps://mynamespace.servicebus.windows.net/myeventhub"

# SAS policy and key are not required if they are encoded in the URL
USER = "RootManageSharedAccessKey"
KEY = "namespaceSASKey"
CONSUMER_GROUP = "$default"
OFFSET = Offset("-1")
PARTITION = "0"

total = 0
last_sn = -1
last_offset = "-1"
client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
try:
    receiver = client.add_receiver(
        CONSUMER_GROUP, PARTITION, prefetch=5000, offset=OFFSET)
    client.run()
    start_time = time.time()
    for event_data in receiver.receive(timeout=100):
        last_offset = event_data.offset
        last_sn = event_data.sequence_number
        print("Received: {}, {}".format(last_offset, last_sn))
        total += 1

    end_time = time.time()
    client.stop()
    run_time = end_time - start_time
    print("Received {} messages in {} seconds".format(total, run_time))

except KeyboardInterrupt:
    pass
finally:
    client.stop()

Recepción de eventosReceive events

Para ejecutar el script, abra un símbolo del sistema que tenga Python en su ruta de acceso y, después, ejecute el siguiente comando:To run the script, open a command prompt that has Python in its path, and then run this command:

start python recv.py

Pasos siguientesNext steps

Lea los siguientes artículos:Read the following articles: