Envío o recepción de eventos en Event Hubs mediante Node.jsSend events to or receive events from Azure Event Hubs using Node.js

Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos capaz de recibir y procesar millones de eventos por segundo.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 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 Node.js para enviar o recibir eventos en un centro de eventos.This tutorial describes how to create Node.js 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 cuenta de Azure activa.An active Azure account. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.
  • Node.js versión 8.x y posteriores.Node.js version 8.x and higher. Descargue la versión LTS más reciente en https://nodejs.org.Download the latest LTS version from https://nodejs.org.
  • Visual Studio Code (recomendado) o cualquier otro IDEVisual Studio Code (recommended) or any other IDE
  • Creación de un espacio de nombres de Event Hubs y un centro de eventos.Create an Event Hubs namespace and an event hub. El primer paso consiste en usar 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.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. Para crear un espacio de nombres y un centro de eventos, siga el procedimiento de este artículo y después continúe con los pasos siguientes de este tutorial.To create a namespace and an event hub, follow the procedure in this article, then continue with the following steps in this tutorial. Después, obtenga la cadena de conexión para el espacio de nombres del centro de eventos. Para ello, siga las instrucciones del artículo Obtenga la cadena de conexión.Then, get the connection string for the event hub namespace by following instructions from the article: Get connection string. Utilizará la cadena de conexión más adelante en el tutorial.You use the connection string later in this tutorial.

Instalación del paquete de npmInstall npm package

Para instalar el paquete de npm para Event Hubs, abra un símbolo del sistema que tenga npm en la ruta de acceso, cambie el directorio a la carpeta en la que quiere tener los ejemplos y ejecute este comando.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

Para instalar el paquete de npm para el Host de procesador de eventos, ejecute el comando siguiente.To install the npm package for Event Processor Host, run the below command instead

npm install @azure/event-processor-host

Envío de eventosSend events

En esta sección se muestra cómo crear una aplicación de Node.js que envíe eventos a un centro de eventos.This section shows you how to create a Node.js application that sends events to an event hub.

  1. Abra el editor que prefiera, como Visual Studio Code.Open your favorite editor, such as Visual Studio Code.

  2. Cree un archivo denominado send.js y pegue en él el código siguiente.Create a file called send.js and paste the below code into it. Obtenga la cadena de conexión para el espacio de nombres del centro de eventos siguiendo las instrucciones del artículo: Obtenga la cadena de conexión.Get the connection string for the event hub namespace by following instructions from the article: Get connection string.

    const { EventHubClient } = require("@azure/event-hubs");
    
    // 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. Escriba la cadena de conexión y el nombre del centro de eventos en el código anterior.Enter the connection string and the name of your Event Hub in the above code

  4. Después, ejecute el comando node send.js en un símbolo del sistema para ejecutar este archivo.Then run the command node send.js in a command prompt to execute this file. De este modo, se enviarán 100 eventos a su centro de eventos.This will send 100 events to your Event Hub

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

Recepción de eventosReceive events

En esta sección se muestra cómo crear una aplicación de Node.js que recibe eventos de una única partición del grupo de consumidores predeterminado en un centro de eventos.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. Abra el editor que prefiera, como Visual Studio Code.Open your favorite editor, such as Visual Studio Code.
  2. Cree un archivo denominado receive.js y pegue en él el código siguiente.Create a file called receive.js and paste the below code into it.
    const { EventHubClient, delay } = require("@azure/event-hubs");
    
    // 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. Escriba la cadena de conexión y el nombre del centro de eventos en el código anterior.Enter the connection string and the name of your Event Hub in the above code.
  4. Después, ejecute el comando node receive.js en un símbolo del sistema para ejecutar este archivo.Then run the command node receive.js in a command prompt to execute this file. Recibirá los eventos de una de las particiones del grupo de consumidores predeterminado en su centro de eventos.This will receive events from one of the partitions of the default consumer group in your Event Hub

Felicidades.Congratulations! Ha recibido eventos procedentes del centro de eventos.You have now received events from event hub.

Recepción de eventos mediante el Host de procesador de eventosReceive events using Event Processor Host

En esta sección se muestra cómo recibir eventos de un centro de eventos mediante EventProcessorHost de Azure en una aplicación de Node.js.This section shows how to receive events from an event hub by using Azure EventProcessorHost in a Node.js application. EventProcessorHost (EPH) ayuda a recibir de manera eficaz eventos de un centro de eventos mediante la creación de receptores en todas las particiones del grupo de consumidores de un centro de eventos.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. Establece un punto de comprobación de los metadatos de los mensajes recibidos a intervalos regulares en una instancia de Azure Storage Blob.It checkpoints metadata on received messages at regular intervals in an Azure Storage Blob. Este enfoque le permite seguir recibiendo más adelante mensajes desde donde lo dejó.This approach makes it easy to continue receiving messages from where you left off at a later time.

  1. Abra el editor que prefiera, como Visual Studio Code.Open your favorite editor, such as Visual Studio Code.
  2. Cree un archivo denominado receiveAll.js y pegue en él el código siguiente.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. Escriba la cadena de conexión y el nombre del centro de eventos en el código anterior, junto con la cadena de conexión de Azure Blob Storage.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. Después, ejecute el comando node receiveAll.js en un símbolo del sistema para ejecutar este archivo.Then run the command node receiveAll.js in a command prompt to execute this file.

Felicidades.Congratulations! Ha recibido eventos de un centro de eventos por medio del Host de procesador de eventos.You have now received events from event hub using Event Processor Host. Recibirá los eventos de todas las particiones del grupo de consumidores predeterminado en su centro de eventos.This will receive events from all the partitions of the default consumer group in your Event Hub

Pasos siguientesNext steps

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