Azure IoT Hub-Bindungen für Azure Functions
Diese Gruppe von Artikeln erläutert das Arbeiten mit Azure Functions-Bindungen für IoT Hub. Die IoT Hub-Unterstützung basiert auf der Azure Event Hubs-Bindung.
Wichtig
Die folgenden Codebeispiele verwenden zwar die Event Hub-API, aber die Syntax gilt auch für IoT Hub-Funktionen.
Aktion | type |
---|---|
Reagieren auf Ereignisse, die an einen IoT Hub-Ereignisdatenstrom gesendet werden. | Trigger |
Installieren der Erweiterung
Das NuGet-Erweiterungspaket, das Sie installieren, hängt vom C#-Modus ab, den Sie in Ihrer Funktions-App verwenden:
Funktionen werden in einem isolierten C#-Workerprozess ausgeführt. Weitere Informationen finden Sie im Leitfaden zum Ausführen von Azure Functions (C#) in einem isolierten Workerprozess.
Die Funktionalität der Erweiterung ist abhängig von der Erweiterungsversion unterschiedlich:
Diese Version führt die Möglichkeit zur Verbindungsherstellung mithilfe einer Identität anstelle eines Geheimnisses ein. Ein Tutorial zum Konfigurieren Ihrer Funktions-Apps mit verwalteten Identitäten finden Sie im Tutorial zum Erstellen einer Funktions-App mit identitätsbasierten Verbindungen.
Fügen Sie ihrem Projekt die Erweiterung hinzu, indem Sie das NuGet-Paket, Version 5.x, installieren.
Installieren des Pakets
Die Event Hubs-Erweiterung ist Teil eines Erweiterungspakets, das in Ihrer Projektdatei „host.json“ angegeben wird. Möglicherweise müssen Sie dieses Paket ändern, um die Version der Bindung zu ändern, oder wenn Pakete noch nicht installiert sind. Weitere Informationen finden Sie unter Erweiterungspakete.
Diese Version führt die Möglichkeit zur Verbindungsherstellung mithilfe einer Identität anstelle eines Geheimnisses ein. Ein Tutorial zum Konfigurieren Ihrer Funktions-Apps mit verwalteten Identitäten finden Sie im Tutorial zum Erstellen einer Funktions-App mit identitätsbasierten Verbindungen.
Sie können diese Version der Erweiterung aus dem Erweiterungspaket v3 hinzufügen, indem Sie den folgenden Code in Ihrer Datei host.json
hinzufügen oder ersetzen:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.3.0, 4.0.0)"
}
}
Weitere Informationen finden Sie unter Aktualisierung Ihrer Erweiterungen.
Bindungstypen
Die für .NET unterstützten Bindungstypen hängen sowohl von der Erweiterungsversion als auch von dem C#-Ausführungsmodus ab, der einer der folgenden sein kann:
Eine Klassenbibliothek in einem isolierten Workerprozess ist eine kompilierte C#-Funktion, die in einem von der Runtime isolierten Prozess ausgeführt wird.
Wählen Sie eine Version aus, um für den Modus und die Version Details zum Bindungstyp anzuzeigen.
Der isolierte Workerprozess unterstützt Parametertypen gemäß den folgenden Tabellen. Unterstützung für die Bindung an Typen aus Azure.Messaging.EventHubs befindet sich in der Vorschauphase.
Event Hubs-Trigger
Wenn die Funktion ein einzelnes Ereignis verarbeiten soll, kann der Event Hubs-Trigger an die folgenden Typen gebunden werden:
type | BESCHREIBUNG |
---|---|
string |
Das Ereignis als Zeichenfolge. Verwenden Sie diesen Parameter, wenn es sich bei dem Ereignis um einfachen Text handelt. |
byte[] |
Die Bytes der Ereignisnachricht. |
Serialisierbare JSON-Typen | Wenn ein Ereignis JSON-Daten enthält, versucht Azure Functions, die JSON-Daten in einen POCO-Objekttyp (plain-old CLR Object) zu deserialisieren. |
Azure.Messaging.EventHubs.EventData1 | Das Ereignisobjekt. Wenn Sie aus älteren Versionen der Event Hubs SDKs migrieren, beachten Sie, dass diese Version Unterstützung für den Legacytyp Body zugunsten von EventBody einstellt. |
Wenn die Funktion einen Ereignisbatch verarbeiten soll, kann der Event Hubs-Trigger an die folgenden Typen gebunden werden:
type | BESCHREIBUNG |
---|---|
string[] |
Ein Array von Ereignissen aus dem Batch als Zeichenfolgen. Jeder Eintrag stellt ein Ereignis dar. |
EventData[] 1 |
Ein Array von Ereignissen aus dem Batch als Instanzen von Azure.Messaging.EventHubs.EventData. Jeder Eintrag stellt ein Ereignis dar. |
T[] , wobei T ein serialisierbarer JSON-Typ ist1. |
Ein Array von Ereignissen aus dem Batch als Instanzen eines benutzerdefinierten POCO-Typs. Jeder Eintrag stellt ein Ereignis dar. |
1 Um diese Typen zu verwenden, müssen Sie auf Microsoft.Azure.Functions.Worker.Extensions.EventHubs 5.5.0 oder höher und die gemeinsamen Abhängigkeiten für SDK-Typbindungen verweisen.
Event Hubs-Ausgabebindung
Wenn die Funktion ein einzelnes Ereignis schreiben soll, kann die Event Hubs-Ausgabebindung an die folgenden Typen gebunden werden:
type | BESCHREIBUNG |
---|---|
string |
Das Ereignis als Zeichenfolge. Verwenden Sie diesen Parameter, wenn es sich bei dem Ereignis um einfachen Text handelt. |
byte[] |
Die Bytes der Ereignisnachricht. |
Serialisierbare JSON-Typen | Ein Objekt, das das Ereignis darstellt. Functions versucht, einen POCO-Typ (Plain-Old CLR Object) in JSON-Daten zu serialisieren. |
Wenn die Funktion mehrere Ereignisse schreiben soll, kann die Event Hubs-Ausgabebindung an die folgenden Typen gebunden werden:
type | BESCHREIBUNG |
---|---|
T[] , wobei T einer der einzelnen Ereignistypen ist |
Ein Array, das mehrere Ereignisse enthält. Jeder Eintrag stellt ein Ereignis dar. |
Für andere Ausgabeszenarien erstellen und verwenden Sie Typen direkt aus Microsoft.Azure.EventHubs.
Einstellungen für „host.json“
Die Datei host.json enthält Einstellungen, die das Verhalten für Event Hubs-Trigger steuern. Die Konfiguration unterscheidet sich abhängig von der Version der Erweiterung.
{
"version": "2.0",
"extensions": {
"eventHubs": {
"maxEventBatchSize" : 100,
"minEventBatchSize" : 25,
"maxWaitTime" : "00:05:00",
"batchCheckpointFrequency" : 1,
"prefetchCount" : 300,
"transportType" : "amqpWebSockets",
"webProxy" : "https://proxyserver:8080",
"customEndpointAddress" : "amqps://company.gateway.local",
"targetUnprocessedEventThreshold" : 75,
"initialOffsetOptions" : {
"type" : "fromStart",
"enqueuedTimeUtc" : ""
},
"clientRetryOptions":{
"mode" : "exponential",
"tryTimeout" : "00:01:00",
"delay" : "00:00:00.80",
"maximumDelay" : "00:01:00",
"maximumRetries" : 3
}
}
}
}
Eigenschaft | Standard | Beschreibung |
---|---|---|
maxEventBatchSize2 | 100 | Die maximale Anzahl der Ereignisse, die in einem Batch für einen einzelnen Aufruf enthalten sind. Die Anzahl muss mindestens 1 sein. |
minEventBatchSize1 | 1 | Die Mindestanzahl von Ereignissen, die in einem Batch gewünscht sind. Das Minimum gilt nur, wenn die Funktion mehrere Ereignisse empfängt, und muss kleiner als maxEventBatchSize sein.Die Mindestgröße ist nicht streng garantiert. Ein partieller Batch wird versendet, wenn ein vollständiger Batch nicht vorbereitet werden kann, bevor maxWaitTime abgelaufen ist. Partielle Batches sind auch für den ersten Aufruf der Funktion nach der Skalierung wahrscheinlich. |
maxWaitTime1 | 00:01:00 | Das maximale Intervall, das der Trigger warten sollte, um einen Batch zu füllen, bevor die Funktion aufgerufen wird. Die Wartezeit wird nur berücksichtigt, wenn minEventBatchSize größer als 1 ist, und wird andernfalls ignoriert. Wenn weniger als minEventBatchSize Ereignisse verfügbar waren, bevor die Wartezeit verstrichen ist, wird die Funktion mit einem partiellen Batch aufgerufen. Die längste zulässige Wartezeit beträgt 10 Minuten.HINWEIS: Dieses Intervall ist keine strikte Garantie für den genauen Zeitpunkt, zu dem die Funktion aufgerufen wird. Es gibt eine kleine Fehlertoleranz aufgrund der Timergenauigkeit. Wenn die Skalierung erfolgt, kann der erste Aufruf mit einem partiellen Batch schneller erfolgen oder bis zu doppelt so lange dauern wie die konfigurierte Wartezeit. |
batchCheckpointFrequency | 1 | Die Anzahl der zu verarbeitenden Batches, bevor ein Prüfpunkt für den Event Hub erstellt wird |
prefetchCount | 300 | Die Anzahl der Ereignisse, die von Event Hubs dringend angefordert und in einem lokalen Cache gespeichert werden, um Lesezugriffe zu ermöglichen, um das Warten auf einen Netzwerkvorgang zu vermeiden |
transportType | amqpTcp | Das Protokoll und der Transport, die für die Kommunikation mit Event Hubs verwendet werden. Verfügbare Optionen: amqpTcp , amqpWebSockets |
webProxy | NULL | Der Proxy, der für die Kommunikation mit Event Hubs über Websockets verwendet werden soll. Ein Proxy kann nicht mit dem amqpTcp -Datentransport verwendet werden. |
customEndpointAddress | NULL | Die Adresse, die beim Herstellen einer Verbindung mit Event Hubs verwendet werden soll, sodass Netzwerkanforderungen über ein Anwendungsgateway oder einen anderen Pfad weitergeleitet werden können, der für die Hostumgebung benötigt wird. Der vollqualifizierte Namespace für den Event Hub wird weiterhin benötigt, wenn eine benutzerdefinierte Endpunktadresse verwendet wird und explizit oder über die Verbindungszeichenfolge angegeben werden muss. |
targetUnprocessedEventThreshold1 | NULL | Die gewünschte Anzahl nicht verarbeiteter Ereignisse pro Funktionsinstanz. Dieser Schwellenwert wird bei der zielbasierten Skalierung verwendet, um den von der Option maxEventBatchSize abgeleiteten standardmäßigen Skalierungsschwellenwert zu überschreiben. Wenn der Wert festgelegt ist, wird die Gesamtzahl der unverarbeiteten Ereignisse durch diesen Wert geteilt, um die Anzahl der benötigten Funktionsinstanzen zu bestimmen. Die Anzahl der Instanzen wird auf eine Zahl aufgerundet, die eine ausgewogene Partitionsverteilung ergibt. |
initialOffsetOptions/type | fromStart | Der Punkt innerhalb des Ereignisdatenstroms, von dem aus die Verarbeitung gestartet wird, wenn im Speicher kein Prüfpunkt vorhanden ist. Gilt für alle Partitionen. Weitere Informationen finden Sie in der OffsetType-Dokumentation. Verfügbare Optionen: fromStart , fromEnd , fromEnqueuedTime |
initialOffsetOptions/enqueuedTimeUtc | NULL | Gibt für das Ereignis des Datenstroms den Zeitpunkt der Einreihung in die Warteschlange an, ab dem mit der Verarbeitung begonnen werden soll. Wenn initialOffsetOptions/type als fromEnqueuedTime konfiguriert wird, ist diese Einstellung obligatorisch. Es werden Zeitangaben in allen Formaten unterstützt, die von DateTime.Parse() unterstützt werden, z. B. 2020-10-26T20:31Z . Der Eindeutigkeit halber sollten Sie auch eine Zeitzone angeben. Wenn keine Zeitzone angegeben wird, wird von Functions die lokale Zeitzone des Computers übernommen, auf dem die Funktions-App ausgeführt wird. Bei der Ausführung in Azure ist dies „UTC“. |
clientRetryOptions/mode | exponential | Die Methode, die zum Berechnen von Wiederholungsverzögerungen verwendet werden soll Im exponentiellen Modus werden Wiederholungsversuche mit einer Verzögerung basierend auf einer Wartezeitstrategie ausgeführt, bei der jeder Versuch die Wartezeit erhöht, bevor ein neuer Versuch beginnt. Im fixen Modus werden Versuche in festen Abständen wiederholt, und jede Verzögerung hat die gleiche Dauer. Verfügbare Optionen: exponential , fixed |
clientRetryOptions/tryTimeout | 00:01:00 | Die maximale Dauer, die pro Versuch auf den Abschluss eines Event Hubs-Vorgangs gewartet werden soll |
clientRetryOptions/delay | 00:00:00.80 | Der Verzögerungs- oder Wartezeitfaktor, der zwischen Wiederholungsversuchen angewendet werden soll |
clientRetryOptions/maximumDelay | 00:00:01 | Die maximale zugelassene Verzögerung zwischen Wiederholungsversuchen |
clientRetryOptions/maximumRetries | 3 | Die maximale Anzahl von Wiederholungsversuchen, bevor der zugeordnete Vorgang als fehlgeschlagen angesehen wird |
1 Verwenden von minEventBatchSize
und maxWaitTime
erfordert v5.3.0 des Microsoft.Azure.WebJobs.Extensions.EventHubs
-Pakets oder eine höhere Version.
2 Der Standardwert maxEventBatchSize
wurde in v6.0.0 des Microsoft.Azure.WebJobs.Extensions.EventHubs
-Pakets geändert. In früheren Versionen war er „10“.
Die clientRetryOptions
werden verwendet, um Vorgänge zwischen dem Functions-Host und Event Hubs (z. B. Abrufen von Ereignissen und Senden von Ereignissen) zu wiederholen. Informationen zum Anwenden von Wiederholungsrichtlinien auf einzelne Funktionen finden Sie in der Anleitung Fehlerbehandlung und Wiederholungen in Azure Functions.
Eine Referenz für „host.json“ in Azure Functions 2x und höheren Versionen finden Sie in der host.json-Referenz für Azure Functions 2.x oder höher.