Azure Event Hubs-Bindungen für Azure FunctionsAzure Event Hubs bindings for Azure Functions

Dieser Artikel erläutert das Arbeiten mit Azure Event Hubs-Bindungen für Azure Functions.This article explains how to work with Azure Event Hubs bindings for Azure Functions. Azure Functions unterstützt Trigger- und Ausgabebindungen für Event Hubs.Azure Functions supports trigger and output bindings for Event Hubs.

Dies sind Referenzinformationen für Azure Functions-Entwickler.This is reference information for Azure Functions developers. Falls Sie mit Azure Functions noch nicht vertraut sind, beginnen Sie mit den folgenden Ressourcen:If you're new to Azure Functions, start with the following resources:

Pakete: Functions 1.xPackages - Functions 1.x

Für Azure Functions Version 1.x werden die Event Hubs-Bindungen im NuGet-Paket Microsoft.Azure.WebJobs.ServiceBus, Version 2.x bereitgestellt.For Azure Functions version 1.x, the Event Hubs bindings are provided in the Microsoft.Azure.WebJobs.ServiceBus NuGet package, version 2.x. Den Quellcode für das Paket finden Sie im GitHub-Repository azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Der folgenden Tabelle können Sie entnehmen, wie Sie Unterstützung für diese Bindung in den einzelnen Entwicklungsumgebungen hinzufügen.The following table tells how to add support for this binding in each development environment.

EntwicklungsumgebungDevelopment environment Hinzufügen von Unterstützung inTo add support in
Functions 1.xFunctions 1.x
Lokale Entwicklung – C#-KlassenbibliothekLocal development - C# class library Paket installierenInstall the package
Lokale Entwicklung – C#-Skript, JavaScript, F#Local development - C# script, JavaScript, F# AutomatischAutomatic
Entwicklung im PortalPortal development AutomatischAutomatic

Pakete: Functions 2.xPackages - Functions 2.x

Verwenden Sie für Functions 2.x das Paket Microsoft.Azure.WebJobs.Extensions.EventHubs, Version 3.x.For Functions 2.x, use the Microsoft.Azure.WebJobs.Extensions.EventHubs package, version 3.x. Den Quellcode für das Paket finden Sie im GitHub-Repository azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Der folgenden Tabelle können Sie entnehmen, wie Sie Unterstützung für diese Bindung in den einzelnen Entwicklungsumgebungen hinzufügen.The following table tells how to add support for this binding in each development environment.

EntwicklungsumgebungDevelopment environment Hinzufügen von Unterstützung inTo add support in
Functions 2.xFunctions 2.x
Lokale Entwicklung – C#-KlassenbibliothekLocal development - C# class library Paket installierenInstall the package
Lokale Entwicklung – C#-Skript, JavaScript, F#, Java und PythonLocal development - C# script, JavaScript, F#, Java and Python Erweiterung registrierenRegister the extension
Entwicklung im PortalPortal development Installieren beim Hinzufügen einer AusgabebindungInstall when adding output binding

Informationen zum Aktualisieren der vorhandenen Bindungserweiterungen im Portal ohne erneute Veröffentlichung Ihres Funktions-App-Projekts finden Sie unter Manually install or update Azure Functions binding extensions from the portal (Manuelles Installieren oder Aktualisieren von Azure Functions-Bindungserweiterungen über das Portal).To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

TriggerTrigger

Der Funktionstrigger kann verwendet werden, um auf ein Ereignis zu reagieren, das an einen Event Hub-Datenstrom gesendet wird.Use the function trigger to respond to an event sent to an event hub event stream. Sie benötigen Lesezugriff auf den zugrunde liegenden Event Hub, um den Trigger einzurichten.You must have read access to the underlying event hub to set up the trigger. Beim Auslösen der Funktion wird die an die Funktion übergebene Nachricht als Zeichenfolge eingegeben.When the function is triggered, the message passed to the function is typed as a string.

Trigger – SkalierungTrigger - scaling

Jede Instanz einer durch ein Ereignis ausgelösten Funktion wird durch eine einzelne EventProcessorHost-Instanz gesichert.Each instance of an event triggered function is backed by a single EventProcessorHost instance. Der (auf Event Hubs basierende) Trigger stellt sicher, dass nur eine EventProcessorHost-Instanz eine Lease für eine bestimmte Partition erhalten kann.The trigger (powered by Event Hubs) ensures that only one EventProcessorHost instance can get a lease on a given partition.

Stellen Sie sich einen Event Hub wie folgt vor:For example, consider an Event Hub as follows:

  • 10 Partitionen10 partitions
  • 1.000 gleichmäßig auf alle Partitionen verteilte Ereignisse mit 100 Nachrichten in jeder Partition1,000 events distributed evenly across all partitions, with 100 messages in each partition

Wenn Ihre Funktion zuerst aktiviert wird, gibt es nur eine Instanz der Funktion.When your function is first enabled, there is only one instance of the function. Wir nennen die erste Funktionsinstanz Function_0.Let's call the first function instance Function_0. Die Function_0-Funktion umfasst eine einzelne Instanz von EventProcessorHost mit einer Lease auf allen zehn Partitionen.The Function_0 function has a single instance of EventProcessorHost that holds a lease on all ten partitions. Diese Instanz beginnt mit dem Lesen von Ereignissen von den Partitionen 0-9.This instance is reading events from partitions 0-9. Von diesem Punkt an wird eines der folgenden Ereignisse eintreten:From this point forward, one of the following happens:

  • Es sind keine neuen Funktionsinstanzen erforderlich: Function_0 kann alle 1.000 Ereignisse verarbeiten, bevor die Skalierungslogik von Functions einsetzt.New function instances are not needed: Function_0 is able to process all 1,000 events before the Functions scaling logic take effect. In diesem Fall werden alle 1.000 Nachrichten von Function_0 verarbeitet.In this case, all 1,000 messages are processed by Function_0.

  • Eine weitere Funktionsinstanz wird hinzugefügt: Wenn die Functions-Skalierungslogik bestimmt, dass Function_0 mehr Nachrichten enthält, als verarbeitet werden können, wird eine neue Funktions-App-Instanz (Function_1) erstellt.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. Diese neue Funktion umfasst auch eine zugeordnete Instanz von EventProcessorHost.This new function also has an associated instance of EventProcessorHost. Wenn die zugrunde liegende Event Hubs-Instanz erkennt, dass eine neue Hostinstanz versucht, Nachrichten zu lesen, wird ein Lastenausgleich der Partitionen in den zugehörigen Hostinstanzen vorgenommen.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. Zum Beispiel können die Partitionen 0-4 Function_0 und die Partitionen 5-9 Function_1 zugewiesen werden.For example, partitions 0-4 may be assigned to Function_0 and partitions 5-9 to Function_1.

  • N weitere Funktionsinstanzen werden hinzufügt: Wenn die Functions-Skalierungslogik bestimmt, dass sowohl Function_0 als auch Function_1 mehr Nachrichten aufweisen, als verarbeitet werden können, werden neue Functions_N-Funktions-App-Instanzen erstellt.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. Apps werden erstellt, bis N größer ist als die Anzahl der Event Hub-Partitionen.Apps are created to the point where N is greater than the number of event hub partitions. In unserem Beispiel für Event Hubs erneut einen Lastenausgleich für die Partitionen aus, in diesem Fall für die Instanzen Function_0... Functions_9.In our example, Event Hubs again load balances the partitions, in this case across the instances Function_0...Functions_9.

Wenn Functions skaliert wird, entsprechen N Instanzen einer Zahl, die größer als die Anzahl der Event Hub-Partitionen ist.When Functions scales, N instances is a number greater than the number of event hub partitions. Damit wird sichergestellt, dass EventProcessorHost-Instanzen verfügbar sind, um Partitionen zu sperren, sobald diese von anderen Instanzen bereitgestellt werden.This is done to ensure EventProcessorHost instances are available to obtain locks on partitions as they become available from other instances. Es werden Ihnen nur die Ressourcen berechnet, die bei der Ausführung der Funktionsinstanz in Anspruch genommen werden.You are only charged for the resources used when the function instance executes. Das heißt, die Kosten für diese übermäßige Bereitstellung werden nicht berechnet.In other words, you are not charged for this over-provisioning.

Wenn alle Funktionsausführungen abgeschlossen sind (mit oder ohne Fehler), werden Prüfpunkte dem zugehörigen Speicherkonto hinzugefügt.When all function execution completes (with or without errors), checkpoints are added to the associated storage account. Wenn die Prüfpunkte erfolgreich erstellt wurden, werden alle 1.000 Nachrichten nie wieder abgerufen.When check-pointing succeeds, all 1,000 messages are never retrieved again.

Trigger: BeispielTrigger - example

Sehen Sie sich das sprachspezifische Beispiel an:See the language-specific example:

Trigger: C#-BeispielTrigger - C# example

Das folgende Beispiel zeigt eine C#-Funktion, die den Nachrichtentext des Event Hub-Triggers protokolliert.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}");
}

Um Zugriff auf die Ereignismetadaten im Funktionscode zu erhalten, muss eine Bindung an ein EventData-Objekt erfolgen (erfordert eine using-Anweisung für 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). Sie können auch mithilfe von Bindungsausdrücken in der Methodensignatur auf die gleichen Eigenschaften zugreifen.You can also access the same properties by using binding expressions in the method signature. Im folgenden Beispiel werden beide Methoden zum Abrufen der gleichen Daten veranschaulicht: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}");
}

Um Ereignisse in einem Batch zu empfangen, deklarieren Sie string oder EventData als Array.To receive events in a batch, make string or EventData an array.

Hinweis

Beim Empfangen in einem Batch können Sie DateTime enqueuedTimeUtc nicht für Bindungen mit Methodenparametern wie im obigen Beispiel verwenden und müssen diese von jedem EventData-Objekt erhalten.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}");
    }
}

Trigger: C#-SkriptbeispielTrigger - C# script example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei function.json sowie eine C#-Skriptfunktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and a C# script function that uses the binding. Die Funktion protokolliert den Nachrichtentext des Event Hub-Triggers.The function logs the message body of the event hub trigger.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file.

Version 2.xVersion 2.x

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

Version 1.xVersion 1.x

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

Der C#-Skriptcode sieht wie folgt aus: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}");
}

Um Zugriff auf die Ereignismetadaten im Funktionscode zu erhalten, muss eine Bindung an ein EventData-Objekt erfolgen (erfordert eine using-Anweisung für 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). Sie können auch mithilfe von Bindungsausdrücken in der Methodensignatur auf die gleichen Eigenschaften zugreifen.You can also access the same properties by using binding expressions in the method signature. Im folgenden Beispiel werden beide Methoden zum Abrufen der gleichen Daten veranschaulicht: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}");
}

Um Ereignisse in einem Batch zu empfangen, deklarieren Sie string oder EventData als ein Array: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}");
    }
}

Trigger: F#-BeispielTrigger - F# example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei vom Typ function.json sowie eine F#-Funktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and an F# function that uses the binding. Die Funktion protokolliert den Nachrichtentext des Event Hub-Triggers.The function logs the message body of the event hub trigger.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file.

Version 2.xVersion 2.x

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

Version 1.xVersion 1.x

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

Der F#-Code lautet wie folgt:Here's the F# code:

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

Trigger: JavaScript-BeispielTrigger - JavaScript example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei vom Typ function.json sowie eine JavaScript-Funktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and a JavaScript function that uses the binding. Die Funktion liest Ereignismetadaten und protokolliert die Meldung.The function reads event metadata and logs the message.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file.

Version 2.xVersion 2.x

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

Version 1.xVersion 1.x

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

Der JavaScript-Code sieht wie folgt aus: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();
};

Legen Sie zum Empfangen von Ereignissen in einem Batch in der function.json-Datei cardinality auf many fest, wie im folgenden Beispiel gezeigt.To receive events in a batch, set cardinality to many in the function.json file, as shown in the following examples.

Version 2.xVersion 2.x

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

Version 1.xVersion 1.x

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

Der JavaScript-Code sieht wie folgt aus: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();
};

Trigger: Beispiel für PythonTrigger - Python example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei function.json sowie eine Python-Funktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and a Python function that uses the binding. Die Funktion liest Ereignismetadaten und protokolliert die Meldung.The function reads event metadata and logs the message.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file.

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

Dies ist der Python-Code: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)

Trigger: Java-BeispielTrigger - Java example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei function.json sowie eine Java-Funktion, die die Bindung verwendet.The following example shows an Event Hub trigger binding in a function.json file and an Java function that uses the binding. Die Funktion protokolliert den Nachrichtentext des Event Hub-Triggers.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);
 }

Verwenden Sie die EventHubTrigger-Anmerkung in der Laufzeitbibliothek für Java-Funktionen für Parameter, deren Wert von Event Hub empfangen wird.In the Java functions runtime library, use the EventHubTrigger annotation on parameters whose value would come from Event Hub. Parameter mit diesen Anmerkungen führen dazu, dass die Funktion ausgeführt wird, wenn ein Ereignis empfangen wird.Parameters with these annotations cause the function to run when an event arrives. Diese Anmerkung kann mit nativen Java-Typen, POJOs oder Werten mit Optional<T> verwendet werden, die NULL-Werte annehmen können.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Trigger: AttributeTrigger - attributes

Verwenden Sie in C#-Klassenbibliotheken das Attribut EventHubTriggerAttribute.In C# class libraries, use the EventHubTriggerAttribute attribute.

Der Konstruktor des Attributs nimmt den Namen des Event Hubs, den Namen der Consumergruppe und den Namen einer App-Einstellung an, die die Verbindungszeichenfolge enthält.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. Weitere Informationen zu diesen Einstellungen finden Sie im Abschnitt Triggerkonfiguration.For more information about these settings, see the trigger configuration section. Dieses Beispiel zeigt ein Attribut EventHubTriggerAttribute:Here's an EventHubTriggerAttribute attribute example:

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

Ein vollständiges Beispiel finden Sie unter Trigger: C#-Beispiel.For a complete example, see Trigger - C# example.

Trigger: KonfigurationTrigger - configuration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json und im Attribut EventHubTrigger festlegen:The following table explains the binding configuration properties that you set in the function.json file and the EventHubTrigger attribute.

Eigenschaft von „function.json“function.json property AttributeigenschaftAttribute property BESCHREIBUNGDescription
typetype n/a Muss auf eventHubTrigger festgelegt sein.Must be set to eventHubTrigger. Diese Eigenschaft wird automatisch festgelegt, wenn Sie den Trigger im Azure Portal erstellen.This property is set automatically when you create the trigger in the Azure portal.
directiondirection n/a Muss auf in festgelegt sein.Must be set to in. Diese Eigenschaft wird automatisch festgelegt, wenn Sie den Trigger im Azure Portal erstellen.This property is set automatically when you create the trigger in the Azure portal.
namename n/a Der Name der Variablen, die das Ereigniselement im Funktionscode darstellt.The name of the variable that represents the event item in function code.
pathpath EventHubNameEventHubName Nur Functions 1.x.Functions 1.x only. Der Name des Event Hubs.The name of the event hub. Wenn der Event Hub-Name auch in der Verbindungszeichenfolge enthalten ist, setzt dieser Wert diese Eigenschaft zur Laufzeit außer Kraft.When the event hub name is also present in the connection string, that value overrides this property at runtime.
eventHubNameeventHubName EventHubNameEventHubName Nur Functions 2.x.Functions 2.x only. Der Name des Event Hubs.The name of the event hub. Wenn der Event Hub-Name auch in der Verbindungszeichenfolge enthalten ist, setzt dieser Wert diese Eigenschaft zur Laufzeit außer Kraft.When the event hub name is also present in the connection string, that value overrides this property at runtime.
consumerGroupconsumerGroup ConsumerGroupConsumerGroup Eine optionale Eigenschaft, die zum Festlegen der Consumergruppe#event-consumers) verwendet wird, mit der Ereignisse im Hub abonniert werden.An optional property that sets the consumer group#event-consumers) used to subscribe to events in the hub. Wird sie nicht angegeben, wird die Consumergruppe $Default verwendet.If omitted, the $Default consumer group is used.
cardinalitycardinality n/a Für JavaScript.For Javascript. Legen Sie hierfür many fest, um Batchverarbeitung zu aktivieren.Set to many in order to enable batching. Wenn nicht angegeben oder auf one gesetzt, wird eine einzelne Nachricht an die Funktion übergeben.If omitted or set to one, single message passed to function.
Verbindungconnection ConnectionConnection Der Name einer App-Einstellung, die die Zeichenfolge für die Verbindung mit dem Namespace des Event Hubs enthält.The name of an app setting that contains the connection string to the event hub's namespace. Kopieren Sie diese Verbindungszeichenfolge, indem Sie für den Namespace#create-an-event-hubs-namespace) (nicht für den eigentlichen Event Hub) auf die Schaltfläche Verbindungsinformationen klicken.Copy this connection string by clicking the Connection Information button for the namespace#create-an-event-hubs-namespace), not the event hub itself. Diese Verbindungszeichenfolge muss mindestens über Leseberechtigungen verfügen, um den Trigger zu aktivieren.This connection string must have at least read permissions to activate the trigger.
pathpath EventHubNameEventHubName Der Name des Event Hubs.The name of the event hub. Darauf kann über %eventHubName% in den App-Einstellungen verwiesen werden.Can be referenced via app settings %eventHubName%

Wenn Sie lokal entwickeln, werden App-Einstellungen in der Datei „local.settings.json“ gespeichert.When you're developing locally, app settings go into the local.settings.json file.

Trigger – EreignismetadatenTrigger - event metadata

Der Event Hubs-Trigger stellt mehrere Metadateneigenschaften bereit.The Event Hubs trigger provides several metadata properties. Diese Eigenschaften können als Teil der Bindungsausdrücke in anderen Bindungen oder als Parameter im Code verwendet werden.These properties can be used as part of binding expressions in other bindings or as parameters in your code. Dies sind Eigenschaften der EventData-Klasse.These are properties of the EventData class.

EigenschaftProperty TypType BESCHREIBUNGDescription
PartitionContext PartitionContextPartitionContext Die PartitionContext-Instanz.The PartitionContext instance.
EnqueuedTimeUtc DateTime Die in die Warteschlange eingereihte Uhrzeit in UTC.The enqueued time in UTC.
Offset string Der Offset der Daten relativ zum Event Hub-Partitionsdatenstrom.The offset of the data relative to the Event Hub partition stream. Der Offset ist ein Marker oder ein Bezeichner für ein Ereignis innerhalb des Event Hubs-Datenstroms.The offset is a marker or identifier for an event within the Event Hubs stream. Der Bezeichner ist innerhalb einer Partition des Event Hubs-Datenstroms eindeutig.The identifier is unique within a partition of the Event Hubs stream.
PartitionKey string Die Partition, an die Ereignisdaten gesendet werden sollen.The partition to which event data should be sent.
Properties IDictionary<String,Object> Die Benutzereigenschaften der Ereignisdaten.The user properties of the event data.
SequenceNumber Int64 Die Protokollfolgenummer des Ereignisses.The logical sequence number of the event.
SystemProperties IDictionary<String,Object> Die Systemeigenschaften, einschließlich der Ereignisdaten.The system properties, including the event data.

Codebeispiele mit diesen Eigenschaften finden Sie weiter oben in diesem Artikel.See code examples that use these properties earlier in this article.

Trigger: Eigenschaften von „host.json“Trigger - host.json properties

Die Datei host.json enthält Einstellungen, die das Verhalten des Event Hubs-Triggers steuern.The host.json file contains settings that control Event Hubs trigger behavior.

{
    "eventHub": {
      "maxBatchSize": 64,
      "prefetchCount": 256,
      "batchCheckpointFrequency": 1
    }
}
EigenschaftProperty StandardDefault BESCHREIBUNGDescription
maxBatchSizemaxBatchSize 6464 Die maximale Ereignisanzahl, die pro Empfangsschleife empfangen wird.The maximum event count received per receive loop.
prefetchCountprefetchCount n/a Das standardmäßige PrefetchCount, das von dem zugrunde liegenden EventProcessorHost verwendet wird.The default PrefetchCount that will be used by the underlying EventProcessorHost.
batchCheckpointFrequencybatchCheckpointFrequency 11 Die Anzahl der zu verarbeitenden Ereignisbatches, bevor ein EventHub-Cursorprüfpunkt erstellt wird.The number of event batches to process before creating an EventHub cursor checkpoint.

OutputOutput

Mit der Event Hubs-Ausgabebindung werden Ereignisse in einen Ereignisdatenstrom geschrieben.Use the Event Hubs output binding to write events to an event stream. Um Ereignisse in einen Event Hub schreiben zu können, müssen Sie über eine Sendeberechtigung verfügen.You must have send permission to an event hub to write events to it.

Stellen Sie sicher, dass die erforderlichen Paketverweise vorhanden sind: Functions 1.x oder Functions 2.xEnsure the required package references are in place: Functions 1.x or Functions 2.x

Ausgabe: BeispielOutput - example

Sehen Sie sich das sprachspezifische Beispiel an:See the language-specific example:

Ausgabe: C#-BeispielOutput - C# example

Das folgende Beispiel zeigt eine C#-Funktion, die eine Nachricht in einen Event Hub schreibt. Dabei wird der Rückgabewert der Methode als Ausgabe verwendet: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}";
}

Das folgende Beispiel zeigt, wie Sie die IAsyncCollector-Schnittstelle verwenden, um einen Batch von Nachrichten zu senden.The following sample shows how to use the IAsyncCollector interface to send a batch of messages. Dieses Szenario kommt häufig vor, wenn Sie Nachrichten verarbeiten, die von einem Event Hub kommen, und das Ergebnis an einen anderen Event Hub senden.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));
    }
}

Ausgabe: C#-SkriptbeispielOutput - C# script example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei function.json sowie eine C#-Skriptfunktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and a C# script function that uses the binding. Die Funktion schreibt eine Nachricht in einen Event Hub.The function writes a message to an event hub.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file. Das erste Beispiel gilt für Functions 2.x und das zweite für 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"
}

Der folgende C#-Skriptcode erstellt eine Nachricht: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;
}

Der folgende C#-Skriptcode erstellt mehrere Nachrichten: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);
}

Ausgabe: F#-BeispielOutput - F# example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei vom Typ function.json sowie eine F#-Funktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and an F# function that uses the binding. Die Funktion schreibt eine Nachricht in einen Event Hub.The function writes a message to an event hub.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file. Das erste Beispiel gilt für Functions 2.x und das zweite für 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"
}

Der F#-Code lautet wie folgt: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;

Ausgabe: JavaScript-BeispielOutput - JavaScript example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei vom Typ function.json sowie eine JavaScript-Funktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and a JavaScript function that uses the binding. Die Funktion schreibt eine Nachricht in einen Event Hub.The function writes a message to an event hub.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file. Das erste Beispiel gilt für Functions 2.x und das zweite für 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"
}

Der folgende JaveScript-Code sendet eine einzelne Nachricht: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();
};

Der folgende JaveScript-Code sendet mehrere Nachrichten: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();
};

Ausgabe: Beispiel für PythonOutput - Python example

Das folgende Beispiel zeigt eine Event Hub-Triggerbindung in einer Datei function.json sowie eine Python-Funktion, die die Bindung verwendet.The following example shows an event hub trigger binding in a function.json file and a Python function that uses the binding. Die Funktion schreibt eine Nachricht in einen Event Hub.The function writes a message to an event hub.

Die folgenden Beispiele zeigen die Event Hubs-Bindungsdaten in der function.json-Datei.The following examples show Event Hubs binding data in the function.json file.

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

Der folgende Python-Code sendet eine einzelne Nachricht: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)

Ausgabe: Java-BeispielOutput - Java example

Das folgende Beispiel zeigt eine Java-Funktion, die eine Nachricht mit der aktuellen Uhrzeit in einen Event Hub schreibt.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();
 }

Verwenden Sie die @EventHubOutput-Anmerkung in der Laufzeitbibliothek für Java-Funktionen für Parameter, deren Wert in Event Hub veröffentlicht wird.In the Java functions runtime library, use the @EventHubOutput annotation on parameters whose value would be published to Event Hub. Der Parametertyp sollte OutputBinding<T> lauten, wobei „T“ für ein POJO oder einen beliebigen nativen Java-Typ steht.The parameter should be of type OutputBinding<T> , where T is a POJO or any native Java type.

Ausgabe: AttributeOutput - attributes

Verwenden Sie für C#-Klassenbibliotheken das Attribut EventHubAttribute.For C# class libraries, use the EventHubAttribute attribute.

Der Konstruktor des Attributs nimmt den Namen des Event Hubs und den Namen einer App-Einstellung an, die die Verbindungszeichenfolge enthält.The attribute's constructor takes the name of the event hub and the name of an app setting that contains the connection string. Weitere Informationen zu diesen Einstellungen finden Sie unter Ausgabe: Konfiguration.For more information about these settings, see Output - configuration. Dieses Beispiel zeigt ein Attribut 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)
{
    ...
}

Ein vollständiges Beispiel finden Sie unter Ausgabe: C#-Beispiel.For a complete example, see Output - C# example.

Ausgabe: KonfigurationOutput - configuration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json und im Attribut EventHub festlegen:The following table explains the binding configuration properties that you set in the function.json file and the EventHub attribute.

Eigenschaft von „function.json“function.json property AttributeigenschaftAttribute property BESCHREIBUNGDescription
typetype n/a Muss auf „eventHub“ festgelegt werden.Must be set to "eventHub".
directiondirection n/a Muss auf „out“ festgelegt werden.Must be set to "out". Dieser Parameter wird automatisch festgelegt, wenn Sie die Bindung im Azure Portal erstellen.This parameter is set automatically when you create the binding in the Azure portal.
namename n/a Der Variablenname, der in Funktionscode verwendet wird, der das Ereignis darstellt.The variable name used in function code that represents the event.
pathpath EventHubNameEventHubName Nur Functions 1.x.Functions 1.x only. Der Name des Event Hubs.The name of the event hub. Wenn der Event Hub-Name auch in der Verbindungszeichenfolge enthalten ist, setzt dieser Wert diese Eigenschaft zur Laufzeit außer Kraft.When the event hub name is also present in the connection string, that value overrides this property at runtime.
eventHubNameeventHubName EventHubNameEventHubName Nur Functions 2.x.Functions 2.x only. Der Name des Event Hubs.The name of the event hub. Wenn der Event Hub-Name auch in der Verbindungszeichenfolge enthalten ist, setzt dieser Wert diese Eigenschaft zur Laufzeit außer Kraft.When the event hub name is also present in the connection string, that value overrides this property at runtime.
Verbindungconnection ConnectionConnection Der Name einer App-Einstellung, die die Zeichenfolge für die Verbindung mit dem Namespace des Event Hubs enthält.The name of an app setting that contains the connection string to the event hub's namespace. Kopieren Sie diese Verbindungszeichenfolge, indem Sie für den Namespace (nicht für den eigentlichen Event Hub) auf die Schaltfläche Verbindungsinformationen klicken.Copy this connection string by clicking the Connection Information button for the namespace, not the event hub itself. Diese Verbindungszeichenfolge muss über Sendeberechtigungen zum Senden der Nachricht an den Ereignisstrom verfügen.This connection string must have send permissions to send the message to the event stream.

Wenn Sie lokal entwickeln, werden App-Einstellungen in der Datei „local.settings.json“ gespeichert.When you're developing locally, app settings go into the local.settings.json file.

Ausgabe: VerwendungOutput - usage

Verwenden Sie in C# und C#-Skripts einen Methodenparameter wie out string paramName, um Nachrichten zu senden.In C# and C# script, send messages by using a method parameter such as out string paramName. In C#-Skripts ist paramName der Wert, der in der Eigenschaft name von function.json angegeben ist.In C# script, paramName is the value specified in the name property of function.json. Um mehrere Nachrichten zu schreiben, können Sie ICollector<string> oder IAsyncCollector<string> anstelle von out string verwenden.To write multiple messages, you can use ICollector<string> or IAsyncCollector<string> in place of out string.

Greifen Sie in JavaScript mit context.bindings.<name> auf das Ausgabeereignis zu.In JavaScript, access the output event by using context.bindings.<name>. <name> ist der Wert, der in der Eigenschaft name von function.json angegeben wird.<name> is the value specified in the name property of function.json.

Ausnahmen und RückgabecodesExceptions and return codes

BindungBinding VerweisReference
Event HubEvent Hub BetriebsleitfadenOperations Guide

Einstellungen für „host.json“host.json settings

In diesem Abschnitt werden die verfügbaren globalen Konfigurationseinstellungen für diese Bindung in Version 2.x beschrieben.This section describes the global configuration settings available for this binding in version 2.x. Die nachfolgende Beispieldatei „host.json“ enthält nur die Einstellungen für Version 2.x für diese Bindung.The example host.json file below contains only the version 2.x settings for this binding. Weitere Informationen zu globalen Konfigurationseinstellungen in Version 2.x finden Sie unter host.json-Referenz für Azure Functions 2.x.For more information about global configuration settings in version 2.x, see host.json reference for Azure Functions version 2.x.

Hinweis

Eine Referenz für „host.json“ in Functions 1.x finden Sie unter host.json-Referenz für Azure Functions 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
            }
        }
    }
}  
EigenschaftProperty StandardDefault BESCHREIBUNGDescription
maxBatchSizemaxBatchSize 6464 Die maximale Ereignisanzahl, die pro Empfangsschleife empfangen wird.The maximum event count received per receive loop.
prefetchCountprefetchCount n/a Das standardmäßige PrefetchCount, das von dem zugrunde liegenden EventProcessorHost verwendet wird.The default PrefetchCount that will be used by the underlying EventProcessorHost.
batchCheckpointFrequencybatchCheckpointFrequency 11 Die Anzahl der zu verarbeitenden Ereignisbatches, bevor ein EventHub-Cursorprüfpunkt erstellt wird.The number of event batches to process before creating an EventHub cursor checkpoint.

Nächste SchritteNext steps