Enlaces de Azure Event Hubs para Azure FunctionsAzure Event Hubs bindings for Azure Functions

En este artículo se explica cómo usar enlaces de Azure Event Hubs para Azure Functions.This article explains how to work with Azure Event Hubs bindings for Azure Functions. Azure Functions admite enlaces de desencadenador y salida para Event Hubs.Azure Functions supports trigger and output bindings for Event Hubs.

Esta es la información de referencia para desarrolladores de Azure Functions.This is reference information for Azure Functions developers. Si está familiarizado con Azure Functions, comience con los siguientes recursos:If you're new to Azure Functions, start with the following resources:

Paquetes: Functions 1.xPackages - Functions 1.x

En Azure Functions versión 1.x, los enlaces de Event Hubs se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.ServiceBus, versión 2.x.For Azure Functions version 1.x, the Event Hubs bindings are provided in the Microsoft.Azure.WebJobs.ServiceBus NuGet package, version 2.x. El código fuente del paquete se encuentra en el repositorio azure-webjobs-sdk de GitHub.Source code for the package is in the azure-webjobs-sdk GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 1.xFunctions 1.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#Local development - C# script, JavaScript, F# AutomáticoAutomatic
Desarrollo con PortalPortal development AutomáticoAutomatic

Paquetes: Functions 2.xPackages - Functions 2.x

En Functions 2.x, use el paquete Microsoft.Azure.WebJobs.Extensions.EventHubs, versión 3.x.For Functions 2.x, use the Microsoft.Azure.WebJobs.Extensions.EventHubs package, version 3.x. El código fuente del paquete se encuentra en el repositorio azure-webjobs-sdk de GitHub.Source code for the package is in the azure-webjobs-sdk GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 2.xFunctions 2.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#, Java y PythonLocal development - C# script, JavaScript, F#, Java and Python Registro de la extensiónRegister the extension
Desarrollo con PortalPortal development Instalación al agregar el enlace de salidaInstall when adding output binding

Para saber cómo actualizar las extensiones de enlace existentes en el portal sin tener que volver a publicar su proyecto de aplicación de función, consulte Actualización de las extensiones.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

DesencadenadorTrigger

Use el desencadenador de funciones para responder a un evento enviado a una secuencia de eventos del centro de eventos.Use the function trigger to respond to an event sent to an event hub event stream. Debe tener acceso de lectura al centro de eventos subyacente para configurar el desencadenador.You must have read access to the underlying event hub to set up the trigger. Cuando esta función se desencadena, el mensaje que se pasa a la función se escribe como una cadena.When the function is triggered, the message passed to the function is typed as a string.

Desencadenador: escaladoTrigger - scaling

Cada instancia de una función de desencadenador de eventos está respaldada por una única instancia de EventProcessorHost.Each instance of an event triggered function is backed by a single EventProcessorHost instance. El desencadenador (con tecnología de Event Hubs) garantiza que solo una instancia de EventProcessorHost puede obtener una concesión en una partición determinada.The trigger (powered by Event Hubs) ensures that only one EventProcessorHost instance can get a lease on a given partition.

Por ejemplo, considere una instancia de Event Hubs con las siguientes características:For example, consider an Event Hub as follows:

  • 10 particiones.10 partitions
  • 1000 eventos distribuidos uniformemente en todas las particiones, con 100 mensajes en cada partición.1,000 events distributed evenly across all partitions, with 100 messages in each partition

Cuando se habilita la función por primera vez, solo hay una instancia de la función.When your function is first enabled, there is only one instance of the function. Vamos a llamar a esta instancia de función Function_0.Let's call the first function instance Function_0. Laq función Function_0 tiene una sola instancia de EventProcessorHost que contiene una concesión en las diez particiones.The Function_0 function has a single instance of EventProcessorHost that holds a lease on all ten partitions. Esta instancia lee eventos de las particiones 0-9.This instance is reading events from partitions 0-9. A partir de este punto, se producirá una de las siguientes acciones:From this point forward, one of the following happens:

  • No se necesitan nuevas instancias de función: Function_0 puede procesar los 1000 eventos antes de que la lógica de escalado de Azure Functions surta efecto.New function instances are not needed: Function_0 is able to process all 1,000 events before the Functions scaling logic take effect. En este caso, Function_0 procesa los 1000 mensajes.In this case, all 1,000 messages are processed by Function_0.

  • Se agrega una instancia de función adicional: Si la lógica de escalado de Azure Functions determina que Function_0 tiene más mensajes de los que puede procesar, se crea una nueva instancia de la aplicación de función (Function_1).An additional function instance is added: If the Functions scaling logic determines that Function_0 has more messages than it can process, a new function app instance (Function_1) is created. Esta nueva función también tiene asociada una instancia de EventProcessorHost.This new function also has an associated instance of EventProcessorHost. Como la instancia de Event Hubs subyacente detecta que una nueva instancia de host está tratando de leer mensajes, efectúa un equilibrio de carga en las particiones a través de las instancias de host.As the underlying Event Hubs detect that a new host instance is trying read messages, it load balances the partitions across the its host instances. Por ejemplo, las particiones 0-4 pueden asignarse a Function_0 y las particiones 5-9, a Function_1.For example, partitions 0-4 may be assigned to Function_0 and partitions 5-9 to Function_1.

  • Se agregan N instancias de función más: Si la lógica de escalado de Azure Functions determina que tanto Function_0 como Function_1 tienen más mensajes de los que pueden procesar, se crean más instancias de aplicaciones de función de Functions_N.N more function instances are added: If the Functions scaling logic determines that both Function_0 and Function_1 have more messages than they can process, new Functions_N function app instances are created. Se van creando aplicaciones hasta llegar a un punto en el que N es mayor que el número de particiones de centro de eventos.Apps are created to the point where N is greater than the number of event hub partitions. En nuestro ejemplo, Event Hubs vuelve a equilibrar la carga de las particiones, en este caso, entre las instancias Function_0...Functions_9.In our example, Event Hubs again load balances the partitions, in this case across the instances Function_0...Functions_9.

Cuando Functions escale, N instancias es un número mayor que el número de particiones de centro de eventos.When Functions scales, N instances is a number greater than the number of event hub partitions. Esto se hace para garantizar que va a haber instancias de EventProcessorHost disponibles para obtener bloqueos de las particiones a medida que estén disponibles en otras instancias.This is done to ensure EventProcessorHost instances are available to obtain locks on partitions as they become available from other instances. Solo se le cobra por los recursos usados cuando se ejecuta la instancia de la función.You are only charged for the resources used when the function instance executes. En otras palabras, no se le cobrará por este aprovisionamiento en exceso.In other words, you are not charged for this over-provisioning.

Cuando se completa la ejecución de todas las funciones con o sin errores, se agregan puntos de comprobación a la cuenta de almacenamiento asociada.When all function execution completes (with or without errors), checkpoints are added to the associated storage account. Cuando estos puntos de conexión se agregan correctamente, los 1000 mensajes ya no se vuelven a recuperar.When check-pointing succeeds, all 1,000 messages are never retrieved again.

Desencadenador: ejemploTrigger - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Desencadenador: ejemplo de C#Trigger - C# example

En el ejemplo siguiente se muestra una función de C# que registra el cuerpo del mensaje del desencadenador del centro de eventos.The following example shows a C# function that logs the message body of the event hub trigger.

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] string myEventHubMessage, ILogger log)
{
    log.LogInformation($"C# function triggered to process a message: {myEventHubMessage}");
}

Para acceder a los metadatos del evento en el código de función, cree un enlace a un objeto EventData (requiere el uso de una instrucción para Microsoft.Azure.EventHubs).To get access to event metadata in function code, bind to an EventData object (requires a using statement for Microsoft.Azure.EventHubs). También puede acceder a las mismas propiedades mediante el uso de expresiones de enlace en la firma del método.You can also access the same properties by using binding expressions in the method signature. El ejemplo siguiente se muestran las dos maneras de obtener los mismos datos:The following example shows both ways to get the same data:

[FunctionName("EventHubTriggerCSharp")]
public static void Run(
    [EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] EventData myEventHubMessage,
    DateTime enqueuedTimeUtc,
    Int64 sequenceNumber,
    string offset,
    ILogger log)
{
    log.LogInformation($"Event: {Encoding.UTF8.GetString(myEventHubMessage.Body)}");
    // Metadata accessed by binding to EventData
    log.LogInformation($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
    log.LogInformation($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
    log.LogInformation($"Offset={myEventHubMessage.SystemProperties.Offset}");
    // Metadata accessed by using binding expressions in method parameters
    log.LogInformation($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.LogInformation($"SequenceNumber={sequenceNumber}");
    log.LogInformation($"Offset={offset}");
}

Para recibir eventos en un lote, convierta string o EventData en una matriz.To receive events in a batch, make string or EventData an array.

Nota

Cuando se reciben en un lote, no se puede establecer un enlace a parámetros de método como en el ejemplo anterior con DateTime enqueuedTimeUtc y debe recibirlos desde cada objeto EventData.When receiving in a batch you cannot bind to method parameters like in the above example with DateTime enqueuedTimeUtc and must receive these from each EventData object

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] EventData[] eventHubMessages, ILogger log)
{
    foreach (var message in eventHubMessages)
    {
        log.LogInformation($"C# function triggered to process a message: {Encoding.UTF8.GetString(message.Body)}");
        log.LogInformation($"EnqueuedTimeUtc={message.SystemProperties.EnqueuedTimeUtc}");
    }
}

Desencadenador: ejemplo de script de C#Trigger - C# script example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de script de C# que usa el enlace.The following example shows an event hub trigger binding in a function.json file and a C# script function that uses the binding. La función registra el cuerpo del mensaje del desencadenador de centro de eventos.The function logs the message body of the event hub trigger.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file.

Versión 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Versión 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "path": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Este es el código de script de C#:Here's the C# script code:

using System;

public static void Run(string myEventHubMessage, TraceWriter log)
{
    log.Info($"C# function triggered to process a message: {myEventHubMessage}");
}

Para acceder a los metadatos del evento en el código de función, cree un enlace a un objeto EventData (requiere el uso de una instrucción para Microsoft.Azure.EventHubs).To get access to event metadata in function code, bind to an EventData object (requires a using statement for Microsoft.Azure.EventHubs). También puede acceder a las mismas propiedades mediante el uso de expresiones de enlace en la firma del método.You can also access the same properties by using binding expressions in the method signature. El ejemplo siguiente se muestran las dos maneras de obtener los mismos datos:The following example shows both ways to get the same data:

#r "Microsoft.Azure.EventHubs"

using System.Text;
using System;
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.EventHubs;

public static void Run(EventData myEventHubMessage,
    DateTime enqueuedTimeUtc,
    Int64 sequenceNumber,
    string offset,
    TraceWriter log)
{
    log.Info($"Event: {Encoding.UTF8.GetString(myEventHubMessage.Body)}");
    log.Info($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
    log.Info($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
    log.Info($"Offset={myEventHubMessage.SystemProperties.Offset}");

    // Metadata accessed by using binding expressions
    log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.Info($"SequenceNumber={sequenceNumber}");
    log.Info($"Offset={offset}");
}

Para recibir eventos en un lote, convierta string o EventData en una matriz:To receive events in a batch, make string or EventData an array:

public static void Run(string[] eventHubMessages, TraceWriter log)
{
    foreach (var message in eventHubMessages)
    {
        log.Info($"C# function triggered to process a message: {message}");
    }
}

Desencadenador: ejemplo de F#Trigger - F# example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de F# que usa el enlace.The following example shows an event hub trigger binding in a function.json file and an F# function that uses the binding. La función registra el cuerpo del mensaje del desencadenador de centro de eventos.The function logs the message body of the event hub trigger.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file.

Versión 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Versión 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "path": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Este es el código de F#:Here's the F# code:

let Run(myEventHubMessage: string, log: TraceWriter) =
    log.Log(sprintf "F# eventhub trigger function processed work item: %s" myEventHubMessage)

Desencadenador: ejemplo de JavaScriptTrigger - JavaScript example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de JavaScript que usa el enlace.The following example shows an event hub trigger binding in a function.json file and a JavaScript function that uses the binding. La función lee los metadatos del evento y registra el mensaje.The function reads event metadata and logs the message.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file.

Versión 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Versión 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "path": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Este es el código de JavaScript:Here's the JavaScript code:

module.exports = function (context, myEventHubMessage) {
    context.log('Function triggered to process a message: ', myEventHubMessage);
    context.log('EnqueuedTimeUtc =', context.bindingData.enqueuedTimeUtc);
    context.log('SequenceNumber =', context.bindingData.sequenceNumber);
    context.log('Offset =', context.bindingData.offset);

    context.done();
};

Para recibir eventos en un lote, establezca cardinality en many en el archivo function.json, como se muestra en los ejemplos siguientes.To receive events in a batch, set cardinality to many in the function.json file, as shown in the following examples.

Versión 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "eventHubMessages",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "cardinality": "many",
  "connection": "myEventHubReadConnectionAppSetting"
}

Versión 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "eventHubMessages",
  "direction": "in",
  "path": "MyEventHub",
  "cardinality": "many",
  "connection": "myEventHubReadConnectionAppSetting"
}

Este es el código de JavaScript:Here's the JavaScript code:

module.exports = function (context, eventHubMessages) {
    context.log(`JavaScript eventhub trigger function called for message array ${eventHubMessages}`);

    eventHubMessages.forEach((message, index) => {
        context.log(`Processed message ${message}`);
        context.log(`EnqueuedTimeUtc = ${context.bindingData.enqueuedTimeUtcArray[index]}`);
        context.log(`SequenceNumber = ${context.bindingData.sequenceNumberArray[index]}`);
        context.log(`Offset = ${context.bindingData.offsetArray[index]}`);
    });

    context.done();
};

Ejemplo de desencadenador de PythonTrigger - Python example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de Python que usa el enlace.The following example shows an event hub trigger binding in a function.json file and a Python function that uses the binding. La función lee los metadatos del evento y registra el mensaje.The function reads event metadata and logs the message.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file.

{
  "type": "eventHubTrigger",
  "name": "event",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Este es el código de Python:Here's the Python code:

import logging
import azure.functions as func


def main(event: func.EventHubEvent):
    logging.info('Function triggered to process a message: ', event.get_body())
    logging.info('  EnqueuedTimeUtc =', event.enqueued_time)
    logging.info('  SequenceNumber =', event.sequence_number)
    logging.info('  Offset =', event.offset)

Desencadenador: ejemplo de JavaTrigger - Java example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de Java que usa el enlace.The following example shows an Event Hub trigger binding in a function.json file and an Java function that uses the binding. La función registra el cuerpo del mensaje del desencadenador del centro de eventos.The function logs the message body of the Event Hub trigger.

{
  "type": "eventHubTrigger",
  "name": "msg",
  "direction": "in",
  "eventHubName": "myeventhubname",
  "connection": "myEventHubReadConnectionAppSetting"
}
@FunctionName("ehprocessor")
public void eventHubProcessor(
  @EventHubTrigger(name = "msg",
                  eventHubName = "myeventhubname",
                  connection = "myconnvarname") String message,
       final ExecutionContext context )
       {
          context.getLogger().info(message);
 }

En la biblioteca en tiempo de ejecución de funciones de Java, utilice la anotación EventHubTrigger en los parámetros cuyo valor provendría del centro de eventos.In the Java functions runtime library, use the EventHubTrigger annotation on parameters whose value would come from Event Hub. Los parámetros con estas anotaciones hacen que la función se ejecuta cuando llega un evento.Parameters with these annotations cause the function to run when an event arrives. Esta anotación se puede usar con tipos nativos de Java, POJO o valores que aceptan valores NULL mediante Optional<T>.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Desencadenador: atributosTrigger - attributes

En las bibliotecas de clases de C#, use el atributo EventHubTriggerAttribute.In C# class libraries, use the EventHubTriggerAttribute attribute.

El constructor del atributo toma el nombre del centro de eventos, el nombre del grupo de consumidores y el nombre de una configuración de aplicación que contenga la cadena de conexión.The attribute's constructor takes the name of the event hub, the name of the consumer group, and the name of an app setting that contains the connection string. Para obtener más información sobre estas configuraciones, vea la sección Configuración de desencadenador.For more information about these settings, see the trigger configuration section. Este es un ejemplo de atributo EventHubTriggerAttribute:Here's an EventHubTriggerAttribute attribute example:

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] string myEventHubMessage, ILogger log)
{
    ...
}

Para un ejemplo completo, consulte Desencadenador: ejemplo de C#.For a complete example, see Trigger - C# example.

Desencadenador: configuraciónTrigger - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo EventHubTrigger.The following table explains the binding configuration properties that you set in the function.json file and the EventHubTrigger attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
typetype N/Dn/a Se debe establecer en eventHubTrigger.Must be set to eventHubTrigger. Esta propiedad se establece automáticamente cuando se crea el desencadenador en Azure Portal.This property is set automatically when you create the trigger in the Azure portal.
directiondirection N/Dn/a Se debe establecer en in.Must be set to in. Esta propiedad se establece automáticamente cuando se crea el desencadenador en Azure Portal.This property is set automatically when you create the trigger in the Azure portal.
namename N/Dn/a Nombre de la variable que representa el elemento de evento en el código de la función.The name of the variable that represents the event item in function code.
pathpath EventHubNameEventHubName Solo Functions 1.x.Functions 1.x only. El nombre del centro de eventos.The name of the event hub. Cuando el nombre del centro de eventos también está presente en la cadena de conexión, ese valor reemplaza esta propiedad en tiempo de ejecución.When the event hub name is also present in the connection string, that value overrides this property at runtime.
eventHubNameeventHubName EventHubNameEventHubName Solo Functions 2.x.Functions 2.x only. El nombre del centro de eventos.The name of the event hub. Cuando el nombre del centro de eventos también está presente en la cadena de conexión, ese valor reemplaza esta propiedad en tiempo de ejecución.When the event hub name is also present in the connection string, that value overrides this property at runtime.
consumerGroupconsumerGroup ConsumerGroupConsumerGroup Propiedad opcional que establece el grupo de consumidores#event-consumers) que se usará para suscribirse a los eventos del centro.An optional property that sets the consumer group#event-consumers) used to subscribe to events in the hub. Si se pasa por alto, se utilizará el grupo de consumidores $Default.If omitted, the $Default consumer group is used.
cardinalidadcardinality N/Dn/a Para JavaScript.For Javascript. Defínalo como many para permitir el procesamiento por lotes.Set to many in order to enable batching. Si se omite o se define como one, se pasa un único mensaje a la función.If omitted or set to one, single message passed to function.
conexiónconnection ConnectionConnection El nombre de una configuración de aplicación que contenga la cadena de conexión para el espacio de nombres del centro de eventos.The name of an app setting that contains the connection string to the event hub's namespace. Copie esta cadena de conexión haciendo clic en el botón Información de conexión del espacio de nombres#create-an-event-hubs-namespace), no del propio centro de eventos.Copy this connection string by clicking the Connection Information button for the namespace#create-an-event-hubs-namespace), not the event hub itself. Esta cadena de conexión debe tener al menos permisos de lectura para activar el desencadenador.This connection string must have at least read permissions to activate the trigger.
pathpath EventHubNameEventHubName El nombre del centro de eventos.The name of the event hub. Puede hacer referencia al nombre a través de la configuración de la aplicación %eventHubName%Can be referenced via app settings %eventHubName%

Cuando desarrolla localmente, la configuración de aplicación pasa al archivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Desencadenador: metadatos de eventoTrigger - event metadata

El desencadenador de Event Hubs proporciona varias propiedades de metadatos.The Event Hubs trigger provides several metadata properties. Estas propiedades pueden usarse como parte de expresiones de enlace en otros enlaces o como parámetros del código.These properties can be used as part of binding expressions in other bindings or as parameters in your code. Estas son propiedades de la clase EventData.These are properties of the EventData class.

PropiedadProperty EscribaType DESCRIPCIÓNDescription
PartitionContext PartitionContextPartitionContext Instancia de PartitionContext.The PartitionContext instance.
EnqueuedTimeUtc DateTime Hora de puesta en la cola en UTC.The enqueued time in UTC.
Offset string El desplazamiento de los datos relacionados con el flujo de partición de Event Hubs.The offset of the data relative to the Event Hub partition stream. El desplazamiento es un marcador o identificador del flujo de Event Hubs.The offset is a marker or identifier for an event within the Event Hubs stream. El identificador es único dentro de una partición del flujo de Event Hubs.The identifier is unique within a partition of the Event Hubs stream.
PartitionKey string La partición a la que se deben enviar los datos del evento.The partition to which event data should be sent.
Properties IDictionary<String,Object> Las propiedades de usuario de los datos del evento.The user properties of the event data.
SequenceNumber Int64 El número de secuencia de registro del evento.The logical sequence number of the event.
SystemProperties IDictionary<String,Object> Las propiedades del sistema, incluidos los datos del evento.The system properties, including the event data.

Consulte los ejemplos de código que utilizan estas propiedades más arriba en este artículo.See code examples that use these properties earlier in this article.

Desencadenador: propiedades de host.jsonTrigger - host.json properties

El archivo host.json contiene opciones de configuración que controlan el comportamiento de Event Hubs.The host.json file contains settings that control Event Hubs trigger behavior.

{
    "eventHub": {
      "maxBatchSize": 64,
      "prefetchCount": 256,
      "batchCheckpointFrequency": 1
    }
}
PropiedadProperty Valor predeterminadoDefault DESCRIPCIÓNDescription
maxBatchSizemaxBatchSize 6464 Número máximo de eventos recibido por cada bucle de recepción.The maximum event count received per receive loop.
prefetchCountprefetchCount N/Dn/a Valor predeterminado de PrefetchCount que utilizará el host de procesador de eventos subyacente.The default PrefetchCount that will be used by the underlying EventProcessorHost.
batchCheckpointFrequencybatchCheckpointFrequency 11 Número de lotes de eventos que se va a procesar antes de crear un punto de comprobación de cursor de EventHub.The number of event batches to process before creating an EventHub cursor checkpoint.

OutputOutput

Use el enlace de salida de Event Hubs para escribir eventos en una secuencia.Use the Event Hubs output binding to write events to an event stream. Debe tener permiso de envío a un centro de eventos para escribir eventos en él.You must have send permission to an event hub to write events to it.

Asegúrese de que las referencias de los paquetes necesarios están en su lugar: Functions 1.x o Functions 2.xEnsure the required package references are in place: Functions 1.x or Functions 2.x

Salida: ejemploOutput - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Salida: ejemplo de C#Output - C# example

En el ejemplo siguiente se muestra una función de C# que escribe un mensaje en un centro de eventos usando el valor devuelto del método como resultado:The following example shows a C# function that writes a message to an event hub, using the method return value as the output:

[FunctionName("EventHubOutput")]
[return: EventHub("outputEventHubMessage", Connection = "EventHubConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    return $"{DateTime.Now}";
}

En el siguiente ejemplo se muestra cómo usar la interfaz IAsyncCollector para enviar un lote de mensajes.The following sample shows how to use the IAsyncCollector interface to send a batch of messages. Este escenario es habitual cuando se procesan mensajes procedentes de un centro de eventos y el resultado se envía a otro centro de eventos.This scenario is common when you are processing messages coming from one Event Hub and sending the result to another Event Hub.

[FunctionName("EH2EH")]
public static async Task Run(
    [EventHubTrigger("source", Connection = "EventHubConnectionAppSetting")] EventData[] events,
    [EventHub("dest", Connection = "EventHubConnectionAppSetting")]IAsyncCollector<string> outputEvents,
    ILogger log)
{
    foreach (EventData eventData in events)
    {
        // do some processing:
        var myProcessedEvent = DoSomething(eventData);

        // then send the message
        await outputEvents.AddAsync(JsonConvert.SerializeObject(myProcessedEvent));
    }
}

Salida: ejemplo de script de C#Output - C# script example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de script de C# que usa el enlace.The following example shows an event hub trigger binding in a function.json file and a C# script function that uses the binding. La función escribe un mensaje a un centro de eventos.The function writes a message to an event hub.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file. El primer ejemplo es para Functions 2.x y el segundo para Functions 1.x.The first example is for Functions 2.x, and the second one is for Functions 1.x.

{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}
{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "path": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

Este es el código de script de C# que crea un mensaje:Here's C# script code that creates one message:

using System;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, out string outputEventHubMessage, ILogger log)
{
    String msg = $"TimerTriggerCSharp1 executed at: {DateTime.Now}";
    log.LogInformation(msg);   
    outputEventHubMessage = msg;
}

Este es el código de script de C# que crea varios mensajes:Here's C# script code that creates multiple messages:

public static void Run(TimerInfo myTimer, ICollector<string> outputEventHubMessage, ILogger log)
{
    string message = $"Message created at: {DateTime.Now}";
    log.LogInformation(message);
    outputEventHubMessage.Add("1 " + message);
    outputEventHubMessage.Add("2 " + message);
}

Salida: ejemplo de F#Output - F# example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de F# que usa el enlace.The following example shows an event hub trigger binding in a function.json file and an F# function that uses the binding. La función escribe un mensaje a un centro de eventos.The function writes a message to an event hub.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file. El primer ejemplo es para Functions 2.x y el segundo para Functions 1.x.The first example is for Functions 2.x, and the second one is for Functions 1.x.

{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}
{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "path": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

Este es el código de F#:Here's the F# code:

let Run(myTimer: TimerInfo, outputEventHubMessage: byref<string>, log: ILogger) =
    let msg = sprintf "TimerTriggerFSharp1 executed at: %s" DateTime.Now.ToString()
    log.LogInformation(msg);
    outputEventHubMessage <- msg;

Salida: ejemplo de JavaScriptOutput - JavaScript example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de JavaScript que usa el enlace.The following example shows an event hub trigger binding in a function.json file and a JavaScript function that uses the binding. La función escribe un mensaje a un centro de eventos.The function writes a message to an event hub.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file. El primer ejemplo es para Functions 2.x y el segundo para Functions 1.x.The first example is for Functions 2.x, and the second one is for Functions 1.x.

{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}
{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "path": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

Este es el código JavaScript que envía un mensaje:Here's JavaScript code that sends a single message:

module.exports = function (context, myTimer) {
    var timeStamp = new Date().toISOString();
    context.log('Message created at: ', timeStamp);   
    context.bindings.outputEventHubMessage = "Message created at: " + timeStamp;
    context.done();
};

Este es el código JavaScript que envía varios mensajes:Here's JavaScript code that sends multiple messages:

module.exports = function(context) {
    var timeStamp = new Date().toISOString();
    var message = 'Message created at: ' + timeStamp;

    context.bindings.outputEventHubMessage = [];

    context.bindings.outputEventHubMessage.push("1 " + message);
    context.bindings.outputEventHubMessage.push("2 " + message);
    context.done();
};

Salida: ejemplo de PythonOutput - Python example

En el ejemplo siguiente se muestra un enlace de desencadenador de centro de eventos en un archivo function.json y una función de Python que usa el enlace.The following example shows an event hub trigger binding in a function.json file and a Python function that uses the binding. La función escribe un mensaje a un centro de eventos.The function writes a message to an event hub.

Los ejemplos siguientes muestran datos de enlace de Event Hubs en el archivo function.json.The following examples show Event Hubs binding data in the function.json file.

{
    "type": "eventHub",
    "name": "$return",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

Este es el código de Python que envía un solo mensaje:Here's Python code that sends a single message:

import datetime
import logging
import azure.functions as func


def main(timer: func.TimerRequest) -> str:
    timestamp = datetime.datetime.utcnow()
    logging.info('Message created at: %s', timestamp)
    return 'Message created at: {}'.format(timestamp)

Salida: ejemplo de JavaOutput - Java example

El ejemplo siguiente muestra una función de Java que escribe un mensaje que contiene la hora actual en un centro de eventos.The following example shows a Java function that writes a message contianing the current time to an Event Hub.

@}FunctionName("sendTime")
@EventHubOutput(name = "event", eventHubName = "samples-workitems", connection = "AzureEventHubConnection")
public String sendTime(
   @TimerTrigger(name = "sendTimeTrigger", schedule = "0 *&#47;5 * * * *") String timerInfo)  {
     return LocalDateTime.now().toString();
 }

En la biblioteca en tiempo de ejecución de funciones de Java, utilice la anotación @EventHubOutput en los parámetros cuyo valor se publicaría en el centro de eventos.In the Java functions runtime library, use the @EventHubOutput annotation on parameters whose value would be published to Event Hub. El parámetro debe ser del tipo OutputBinding<T>, donde T es un tipo POJO o cualquier tipo nativo de Java.The parameter should be of type OutputBinding<T> , where T is a POJO or any native Java type.

Salida: atributosOutput - attributes

En las bibliotecas de clases de C#, use el atributo EventHubAttribute.For C# class libraries, use the EventHubAttribute attribute.

El constructor del atributo toma el nombre del centro de eventos y el nombre de una configuración de aplicación que contenga la cadena de conexión.The attribute's constructor takes the name of the event hub and the name of an app setting that contains the connection string. Para obtener más información sobre estas configuraciones, vea Salida: configuración.For more information about these settings, see Output - configuration. Este es un ejemplo de atributo EventHub:Here's an EventHub attribute example:

[FunctionName("EventHubOutput")]
[return: EventHub("outputEventHubMessage", Connection = "EventHubConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    ...
}

Para obtener un ejemplo completo, consulte Salida: ejemplo de C#.For a complete example, see Output - C# example.

Salida: configuraciónOutput - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo EventHub.The following table explains the binding configuration properties that you set in the function.json file and the EventHub attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
typetype N/Dn/a Debe establecerse en "eventHub".Must be set to "eventHub".
directiondirection N/Dn/a Debe establecerse en "out".Must be set to "out". Este parámetro se establece automáticamente cuando se crea el enlace en Azure Portal.This parameter is set automatically when you create the binding in the Azure portal.
namename N/Dn/a Nombre de la variable que se usa en el código de la función que representa el evento.The variable name used in function code that represents the event.
pathpath EventHubNameEventHubName Solo Functions 1.x.Functions 1.x only. El nombre del centro de eventos.The name of the event hub. Cuando el nombre del centro de eventos también está presente en la cadena de conexión, ese valor reemplaza esta propiedad en tiempo de ejecución.When the event hub name is also present in the connection string, that value overrides this property at runtime.
eventHubNameeventHubName EventHubNameEventHubName Solo Functions 2.x.Functions 2.x only. El nombre del centro de eventos.The name of the event hub. Cuando el nombre del centro de eventos también está presente en la cadena de conexión, ese valor reemplaza esta propiedad en tiempo de ejecución.When the event hub name is also present in the connection string, that value overrides this property at runtime.
conexiónconnection ConnectionConnection El nombre de una configuración de aplicación que contenga la cadena de conexión para el espacio de nombres del centro de eventos.The name of an app setting that contains the connection string to the event hub's namespace. Copie esta cadena de conexión haciendo clic en el botón Información de conexión del espacio de nombres, no del propio centro de eventos.Copy this connection string by clicking the Connection Information button for the namespace, not the event hub itself. Esta cadena de conexión debe tener permisos de envío para enviar el mensaje a la secuencia de eventos.This connection string must have send permissions to send the message to the event stream.

Cuando desarrolla localmente, la configuración de aplicación pasa al archivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Uso de salidasOutput - usage

En C# y scripts de C#, envíe mensajes mediante un parámetro de método, como out string paramName.In C# and C# script, send messages by using a method parameter such as out string paramName. En script de C#, paramName es el valor especificado en la propiedad name de function.json.In C# script, paramName is the value specified in the name property of function.json. Para escribir varios mensajes, puede usar ICollector<string> o IAsyncCollector<string> en lugar de out string.To write multiple messages, you can use ICollector<string> or IAsyncCollector<string> in place of out string.

En JavaScript, puede obtener acceso al evento de salida usando context.bindings.<name>.In JavaScript, access the output event by using context.bindings.<name>. <name> es el valor especificado en la propiedad name de function.json.<name> is the value specified in the name property of function.json.

Excepciones y códigos de retornoExceptions and return codes

EnlaceBinding ReferenciaReference
Centro de eventosEvent Hub Guía de operacionesOperations Guide

configuración de host.jsonhost.json settings

En esta sección se describen las opciones de configuración globales disponibles para este enlace en la versión 2.x.This section describes the global configuration settings available for this binding in version 2.x. El siguiente archivo host.json de ejemplo contiene solo la configuración de la versión 2.x para este enlace.The example host.json file below contains only the version 2.x settings for this binding. Para obtener más información acerca de las opciones de configuración globales de la versión 2.x, consulte la referencia de host.json para Azure Functions, versión 2.x.For more information about global configuration settings in version 2.x, see host.json reference for Azure Functions version 2.x.

Nota

Para obtener una referencia de host.json en Functions 1.x, consulte la referencia de host.json para Azure Functions, versión 1.x.For a reference of host.json in Functions 1.x, see host.json reference for Azure Functions 1.x.

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "batchCheckpointFrequency": 5,
            "eventProcessorOptions": {
                "maxBatchSize": 256,
                "prefetchCount": 512
            }
        }
    }
}  
PropiedadProperty Valor predeterminadoDefault DESCRIPCIÓNDescription
maxBatchSizemaxBatchSize 6464 Número máximo de eventos recibido por cada bucle de recepción.The maximum event count received per receive loop.
prefetchCountprefetchCount N/Dn/a Valor predeterminado de PrefetchCount que utilizará el host de procesador de eventos subyacente.The default PrefetchCount that will be used by the underlying EventProcessorHost.
batchCheckpointFrequencybatchCheckpointFrequency 11 Número de lotes de eventos que se va a procesar antes de crear un punto de comprobación de cursor de EventHub.The number of event batches to process before creating an EventHub cursor checkpoint.

Pasos siguientesNext steps