Краткое руководство. Отправка и получение событий через Центры событий Azure с помощью Node.jsQuickstart: Send events to or receive events from Azure Event Hubs using Node.js

Центры событий Azure — это платформа потоковой передачи больших данных и служба приема событий, принимающая и обрабатывающая миллионы событий в секунду.Azure Event Hubs is a Big Data streaming platform and event ingestion service that can receive and process 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.

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

Важно!

В рамках этого краткого руководства используется версия 2 пакета SDK Центров событий Azure для JavaScript.This quickstart uses version 2 of the Azure Event Hubs Java Script SDK. Если вы не знакомы с Центрами событий Azure, используйте пакет SDK для JavaScript версии 5.If you are new to Azure Event Hubs, use version 5 of the Java Script SDK. Краткое руководство по использованию пакета SDK для JavaScript версии 5 см. здесь.For a quickstart that uses version 5 of the Java Script SDK, see this article. Чтобы перенести существующий код с версии 2 на версию 5, ознакомьтесь с этим руководством по миграции.If you need to migrate existing code from version 2 to version 5, see the migration guide.

Примечание

Вы можете скачать это краткое руководство в качестве примера с сайта 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 active Azure account. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don't have an Azure subscription, create a free account before you begin.
  • Node.js версии 8.x или более поздней.Node.js version 8.x and higher. Скачайте последнюю версию LTS с сайта https://nodejs.org.Download the latest LTS version from https://nodejs.org.
  • Visual Studio Code (рекомендуется) или любой другой интерфейс IDE.Visual Studio Code (recommended) or any other IDE
  • Создайте пространство имен Центров событий и концентратор событий.Create an Event Hubs namespace and an event hub. Первым шагом является использование портала Azure для создания пространства имен типа Центров событий и получение учетных данных управления, необходимых приложению для взаимодействия с концентратором событий.The first step is to 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 continue with the following steps in this tutorial. Получите строку подключения для пространства имен концентратора событий, следуя инструкциям из статьи Получение строки подключения на портале.Then, get the connection string for the event hub namespace by following instructions from the article: Get connection string. Строка подключения понадобится нам позже.You use the connection string later in this tutorial.

Установка пакета npmInstall npm package

Чтобы установить пакет npm для Центров событий, откройте командную строку, где npm сохранен в переменной окружения path, перейдите в папку, в которой вы хотите сохранить примеры, и выполните эту команду.To install the npm package for Event Hubs, open a command prompt that has npm in its path, change the directory to the folder where you want to have your samples and then run this command

npm install @azure/event-hubs@2

Чтобы установить пакет npm для узла обработчика событий, выполните приведенную ниже команду.To install the npm package for Event Processor Host, run the below command instead

npm install @azure/event-processor-host

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

Из этого раздела вы узнаете, как создать приложение Node.js, которое отправляет события в концентратор событий.This section shows you how to create a Node.js application that sends events to an event hub.

  1. Откройте редактор, например Visual Studio Code.Open your favorite editor, such as Visual Studio Code.

  2. Создайте файл с именем send.js и вставьте в него приведенный ниже код.Create a file called send.js and paste the below code into it. Получите строку подключения для пространства имен концентратора событий, следуя Получение строки подключения на портале.Get the connection string for the event hub namespace by following instructions from the article: Get connection string.

    const { EventHubClient } = require("@azure/event-hubs@2");
    
    // Connection string - primary key of the Event Hubs namespace. 
    // For example: Endpoint=sb://myeventhubns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    const connectionString = "Endpoint=sb://<EVENT HUBS NAMESPACE NAME>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<SHARED ACCESS KEY>";
    
    // Name of the event hub. For example: myeventhub
    const eventHubsName = "<EVENT HUB NAME>";
    
    async function main() {
      const client = EventHubClient.createFromConnectionString(connectionString, eventHubsName);
    
      for (let i = 0; i < 100; i++) {
        const eventData = {body: `Event ${i}`};
        console.log(`Sending message: ${eventData.body}`);
        await client.send(eventData);
      }
    
      await client.close();
    }
    
    main().catch(err => {
      console.log("Error occurred: ", err);
    });
    
  3. Введите строку подключения и имя Центра событий в приведенный выше код.Enter the connection string and the name of your Event Hub in the above code

  4. Затем в окне командной строки выполните команду node send.js, которая запускает этот файл.Then run the command node send.js in a command prompt to execute this file. Она отправит 100 событий в ваш Центр событий.This will send 100 events to your Event Hub

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

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

Из этого раздела вы узнаете, как создать приложение Node.js, которое получает события из одного раздела группы потребителей по умолчанию в концентраторе событий.This section shows you how to create a Node.js application that receives events from a single partition of the default consumer group in an event hub.

  1. Откройте редактор, например Visual Studio Code.Open your favorite editor, such as Visual Studio Code.
  2. Создайте файл с именем receive.js и вставьте в него приведенный ниже код.Create a file called receive.js and paste the below code into it.
    const { EventHubClient, delay } = require("@azure/event-hubs@2");
    
    // Connection string - primary key of the Event Hubs namespace. 
    // For example: Endpoint=sb://myeventhubns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    const connectionString = "Endpoint=sb://<EVENT HUBS NAMESPACE NAME>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<SHARED ACCESS KEY>";
    
    // Name of the event hub. For example: myeventhub
    const eventHubsName = "<EVENT HUB NAME>";
    
    async function main() {
      const client = EventHubClient.createFromConnectionString(connectionString, eventHubsName);
      const allPartitionIds = await client.getPartitionIds();
      const firstPartitionId = allPartitionIds[0];
    
      const receiveHandler = client.receive(firstPartitionId, eventData => {
        console.log(`Received message: ${eventData.body} from partition ${firstPartitionId}`);
      }, error => {
        console.log('Error when receiving message: ', error)
      });
    
      // Sleep for a while before stopping the receive operation.
      await delay(15000);
      await receiveHandler.stop();
    
      await client.close();
    }
    
    main().catch(err => {
      console.log("Error occurred: ", err);
    });
    
  3. Введите строку подключения и имя Центра событий в приведенный выше код.Enter the connection string and the name of your Event Hub in the above code.
  4. Затем в окне командной строки выполните команду node receive.js, которая запускает этот файл.Then run the command node receive.js in a command prompt to execute this file. Она получит события из одного раздела группы потребителей по умолчанию в указанном Центре событий.This will receive events from one of the partitions of the default consumer group in your Event Hub

Поздравляем!Congratulations! Теперь вы получили события из концентратора событий.You have now received events from event hub.

Получение событий с помощью узла обработчика событийReceive events using Event Processor Host

В этом разделе показано, как получать события от концентратора событий, используя EventProcessorHost Azure в приложении Node.js.This section shows how to receive events from an event hub by using Azure EventProcessorHost in a Node.js application. Класс EventProcessorHost (EPH) помогает эффективно получать события от концентратора событий, создавая приемники для всех секций в группе потребителей концентратора событий.The EventProcessorHost (EPH) helps you efficiently receive events from an event hub by creating receivers across all partitions in the consumer group of an event hub. Он регулярно фиксирует метаданные для полученных сообщений в Azure Storage Blob.It checkpoints metadata on received messages at regular intervals in an Azure Storage Blob. Благодаря такому подходу позже можно легко продолжить получать сообщения с того места, где вы остановились.This approach makes it easy to continue receiving messages from where you left off at a later time.

  1. Откройте редактор, например Visual Studio Code.Open your favorite editor, such as Visual Studio Code.
  2. Создайте файл с именем receiveAll.js и вставьте в него приведенный ниже код.Create a file called receiveAll.js and paste the below code into it.
    const { EventProcessorHost, delay } = require("@azure/event-processor-host");
    
    // Connection string - primary key of the Event Hubs namespace. 
    // For example: Endpoint=sb://myeventhubns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    const eventHubConnectionString = "Endpoint=sb://<EVENT HUBS NAMESPACE NAME>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<SHARED ACCESS KEY>";
    
    // Name of the event hub. For example: myeventhub
    const eventHubName = "<EVENT HUB NAME>";
    
    // Azure Storage connection string
    const storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=<STORAGE ACCOUNT NAME>;AccountKey=<STORAGE ACCOUNT KEY>;EndpointSuffix=core.windows.net";
    
    async function main() {
      const eph = EventProcessorHost.createFromConnectionString(
        "my-eph",
        storageConnectionString,
        "my-storage-container-name",
        eventHubConnectionString,
        {
          eventHubPath: eventHubName,
          onEphError: (error) => {
            console.log("[%s] Error: %O", error);
          }
        }
      );
    
    
      eph.start((context, eventData) => {
        console.log(`Received message: ${eventData.body} from partition ${context.partitionId}`);
      }, error => {
        console.log('Error when receiving message: ', error)
      });
    
      // Sleep for a while before stopping the receive operation.
      await delay(15000);
      await eph.stop();
    }
    
    main().catch(err => {
      console.log("Error occurred: ", err);
    });
    
    
  3. Введите в приведенный выше код строку подключения и имя Центра событий, в также строку подключения к хранилищу BLOB-объектов Azure.Enter the connection string and the name of your Event Hub in the above code along with connection string for an Azure Blob Storage
  4. Затем в окне командной строки выполните команду node receiveAll.js, которая запускает этот файл.Then run the command node receiveAll.js in a command prompt to execute this file.

Поздравляем!Congratulations! Теперь вы получили сообщения из концентратора событий с помощью узла обработчика событий.You have now received events from event hub using Event Processor Host. Так вы получите события из всех разделов группы потребителей по умолчанию в указанном Центре событий.This will receive events from all the partitions of the default consumer group in your Event Hub

Дальнейшие действияNext steps

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