Отправка событий или получение событий из концентраторов событий с помощью PythonSend events to or receive events from Event Hubs using Python

Центры событий Azure — это платформа потоковой передачи больших данных и служба приема событий, принимающая и обрабатывающая миллионы событий в секунду.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 can process and store events, data, or telemetry produced by distributed software and devices. Данные, отправляемые в концентратор событий, можно преобразовывать и сохранять с помощью любого поставщика аналитики в реальном времени, а также с помощью адаптеров пакетной обработки или хранения.Data sent to an event hub can be transformed and stored using any real-time analytics provider or batching/storage adapters. Подробный обзор Центров событий см. в статьях Что такое Центры событий Azure? и Обзор функций Центров событий.For detailed overview of Event Hubs, see Event Hubs overview and Event Hubs features.

В этом учебнике описывается создание приложений Python для отправки событий или получения событий из концентратора событий.This tutorial describes how to create Python applications to send events to or receive events from an event hub.

Примечание

Вы можете скачать это краткое руководство в качестве примера с сайта GitHub, заменить строки EventHubConnectionString и EventHubName значениями для своего концентратора событий и выполнить этот пример.You can download this quickstart as a sample from the GitHub, replace EventHubConnectionString and EventHubName strings with your event hub values, and run it. Или следуйте инструкциям из этого руководства, чтобы создать собственное решение.Alternatively, you can follow the steps in this tutorial to create your own.

Предварительные требованияPrerequisites

Для работы с данным руководством вам потребуется:To complete this tutorial, you need the following prerequisites:

  • Подписка Azure.An Azure subscription. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начать работу.If you don't have one, create a free account before you begin.
  • Python 3.4 или более поздней версии.Python 3.4 or later.
  • Используйте портал Azure для создания пространства имен типа концентраторов событий и получения учетных данных управления, необходимых приложению для взаимодействия с концентратором событий.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. Чтобы создать пространство имен и концентратор событий, выполните инструкции из этой статьи.To create a namespace and an event hub, follow the procedure in this article. Затем получите значение ключа доступа для концентратора событий, выполнив инструкции из статьи: Получение строки подключения на портале.Then, get the value of access key for the event hub by following instructions from the article: Get connection string. Используйте ключ доступа в коде, который вы напишете далее в рамках этого руководства.You use the access key in the code you write later in this tutorial. Имя ключа по умолчанию: RootManageSharedAccessKey.The default key name is: RootManageSharedAccessKey.

Установка пакета PythonInstall Python package

Чтобы установить пакет Python для Центров событий, откройте окно командной строки с Python в пути, а затем выполните следующую команду.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

Отправка событийSend events

Примечание

Этот код в этом разделе предназначен для текущей стабильной версии (1.3.1) пакета SDK для концентраторов событий.This code in this section is for the current stable version (1.3.1) of Event Hubs SDK. Если вы ищете пример кода, в котором используется предварительная версия пакета SDK, см. эту страницу.If you are looking for the sample code that uses the preview version of the SDK, see this page.

Создание сценария Python для отправки событийCreate a Python script to send events

Создайте приложение Python, отправляющее события в концентратор событий:Next, create a Python application that sends events to an event hub:

  1. Откройте предпочтительный редактор Python, например Visual Studio CodeOpen your favorite Python editor, such as Visual Studio Code
  2. Создайте сценарий с именем send.py.Create a script called send.py. Этот сценарий отправляет 100 событий в ваш концентратор событий.This script sends 100 events to your event hub.
  3. Вставьте следующий код в send.py, заменив значения ADDRESS, USER и KEY значениями, полученными на портале Azure в предыдущем разделе: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

Запуск приложения для отправки событийRun application to send events

Чтобы выполнить сценарий, откройте окно командной строки с Python в пути, а затем выполните следующую команду.To run the script, open a command prompt that has Python in its path, and then run this command:

start python send.py

Поздравляем!Congratulations! Теперь вы можете отправлять сообщения в концентратор событий.You have now sent messages to an event hub.

Получение событийReceive events

Создание сценария Python для получения событийCreate a Python script to receive events

Создайте приложение Python, получающее события из концентратора событий:Next, create a Python application that receives events from an event hub:

  1. Откройте предпочтительный редактор Python, например Visual Studio CodeOpen your favorite Python editor, such as Visual Studio Code
  2. Создайте сценарий с именем recv.py.Create a script called recv.py.
  3. Вставьте следующий код в recv.py, заменив значения ADDRESS, USER и KEY значениями, полученными на портале Azure в предыдущем разделе: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()

Получение событийReceive events

Чтобы выполнить сценарий, откройте окно командной строки с Python в пути, а затем выполните следующую команду.To run the script, open a command prompt that has Python in its path, and then run this command:

start python recv.py

Следующие шагиNext steps

Ознакомьтесь со следующими статьями:Read the following articles: