Azure WebJobs Event Hubs-Clientbibliothek für .NET – Version 6.0.1
Diese Erweiterung bietet Funktionen für den Zugriff auf Azure Event Hubs über eine Azure-Funktion.
Erste Schritte
Installieren des Pakets
Installieren Sie die Event Hubs-Erweiterung mit NuGet:
dotnet add package Microsoft.Azure.WebJobs.Extensions.EventHubs
Voraussetzungen
Azure-Abonnement: Für die Verwendung von Azure-Diensten, einschließlich Azure Event Hubs, benötigen Sie ein Abonnement. Wenn Sie nicht über ein vorhandenes Azure-Konto verfügen, können Sie sich für eine kostenlose Testversion registrieren oder ihre Visual Studio-Abonnementvorteile beim Erstellen eines Kontos nutzen.
Event Hubs-Namespace mit einem Event Hub: Um mit Azure Event Hubs zu interagieren, müssen Sie auch einen Namespace und Event Hub zur Verfügung haben. Wenn Sie mit dem Erstellen von Azure-Ressourcen nicht vertraut sind, sollten Sie die schrittweise Anleitung zum Erstellen eines Event Hubs mit dem Azure-Portal befolgen. Dort finden Sie auch ausführliche Anweisungen zum Verwenden von Azure CLI-, Azure PowerShell- oder Azure Resource Manager-Vorlagen (ARM) zum Erstellen eines Event Hubs.
Azure Storage-Konto mit Blobspeicher: Zum Beibehalten von Prüfpunkten als Blobs in Azure Storage benötigen Sie ein Azure Storage-Konto mit verfügbaren Blobs. Wenn Sie mit Azure Storage-Konten nicht vertraut sind, können Sie die schrittweise Anleitung zum Erstellen eines Speicherkontos mithilfe des Azure-Portal befolgen. Dort finden Sie auch ausführliche Anweisungen zum Verwenden von Azure CLI-, Azure PowerShell- oder Azure Resource Manager-Vorlagen (ARM) zum Erstellen von Speicherkonten.
Authentifizieren des Clients
Damit die Event Hubs-Clientbibliothek mit einem Event Hub interagieren kann, muss sie verstehen, wie eine Verbindung hergestellt und autorisiert werden kann. Die einfachste Möglichkeit hierfür ist die Verwendung einer Verbindungszeichenfolge, die beim Erstellen eines Event Hubs-Namespaces automatisch erstellt wird. Wenn Sie mit der Verwendung von Verbindungszeichenfolgen mit Event Hubs nicht vertraut sind, sollten Sie die schrittweise Anleitung befolgen, um eine Event Hubs-Verbindungszeichenfolge zu erhalten.
Die Connection
-Eigenschaft von EventHubAttribute
und EventHubTriggerAttribute
wird verwendet, um die Konfigurationseigenschaft anzugeben, in der die Verbindungszeichenfolge gespeichert wird.
Die AzureWebJobsStorage
Verbindungszeichenfolge wird verwendet, um die Verarbeitungsprüfpunktinformationen beizubehalten.
Verwenden Sie für die lokale Entwicklung die local.settings.json
Datei, um die Verbindungszeichenfolge zu speichern:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"<connection_name>": "Endpoint=sb://<event_hubs_namespace>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=Jya7Eh76HU92ibsxuk1ITN8CM8Bt76YLKf5ISjU3jZ8="
}
}
Verwenden Sie bei der Bereitstellung die Anwendungseinstellungen, um die Verbindungszeichenfolge festzulegen.
Identitätsbasierte Authentifizierung
Wenn Für Ihre Umgebung eine verwaltete Identität aktiviert ist, können Sie sie verwenden, um die Event Hubs-Erweiterung zu authentifizieren. Zuvor müssen Sie sicherstellen, dass Berechtigungen wie im Azure Functions Entwicklerhandbuch beschrieben konfiguriert wurden.
Um die identitätsbasierte Authentifizierung zu verwenden, geben Sie die <connection_name>__fullyQualifiedNamespace
Konfigurationseinstellung an.
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"<connection_name>__fullyQualifiedNamespace": "{event_hubs_namespace}.servicebus.windows.net"
}
}
Oder legen Sie im Fall der bereitgestellten App die gleiche Einstellung in den Anwendungseinstellungen fest:
<connection_name>__fullyQualifiedNamespace={event_hubs_namespace}.servicebus.windows.net
Weitere Informationen zum Konfigurieren einer identitätsbasierten Verbindung finden Sie hier.
Wichtige Begriffe
Event Hub-Trigger
Mit dem Event Hub-Trigger kann eine Funktion ausgeführt werden, wenn eine Nachricht an einen Event Hub gesendet wird.
Befolgen Sie das Tutorial Azure Event Hubs Trigger, um mehr über Event Hub-Trigger zu erfahren.
Event Hub-Ausgabebindung
Die Event Hub-Ausgabebindung ermöglicht es einer Funktion, Event Hub-Ereignisse zu senden.
Folgen Sie der Azure Event Hubs Ausgabebindung, um mehr über Event Hub-Bindungen zu erfahren.
Unterstützte Typen
Die folgenden Typen werden für Trigger- und Ausgabebindungen unterstützt:
EventData
string
- Wert wird mit UTF8-Codierung codiertBinaryData
byte[]
- Benutzerdefinierte Modelltypen werden mithilfe von Newtonsoft.Json JSON serialisiert.
IAsyncCollector<T>
eines der oben genannten Typen für BatchtriggerEventHubProducerClient
für Ausgabebindungen
Beispiele
Senden eines einzelnen Ereignisses
Sie können einzelne Ereignisse an einen Event Hub senden, indem Sie den EventHubAttribute
Funktionsrückgabewert anwenden. Der Rückgabewert kann vom string
Typ oder EventData
sein. Bei Verwendung eines Rückgabewerts werden möglicherweise keine Partitionsschlüssel angegeben. Dazu müssen Sie eine Bindung an das IAsyncCollector<EventData>
herstellen, wie unter Senden mehrerer Ereignisse gezeigt.
[FunctionName("BindingToReturnValue")]
[return: EventHub("<event_hub_name>", Connection = "<connection_name>")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer)
{
// This value would get stored in EventHub event body.
// The string would be UTF8 encoded
return $"C# Timer trigger function executed at: {DateTime.Now}";
}
Senden mehrerer Ereignisse
Um mehrere Ereignisse von einem einzelnen Azure-Funktionsaufruf zu senden, können Sie die auf den EventHubAttribute
IAsyncCollector<string>
- oder IAsyncCollector<EventData>
-Parameter anwenden. Partitionsschlüssel dürfen nur bei der Bindung an IAsyncCollector<EventData>
verwendet werden.
[FunctionName("BindingToCollector")]
public static async Task Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[EventHub("<event_hub_name>", Connection = "<connection_name>")] IAsyncCollector<EventData> collector)
{
// When no partition key is used, partitions will be assigned per-batch via round-robin.
await collector.AddAsync(new EventData($"Event 1 added at: {DateTime.Now}"));
await collector.AddAsync(new EventData($"Event 2 added at: {DateTime.Now}"));
// Using a partition key will help group events together; events with the same key
// will always be assigned to the same partition.
await collector.AddAsync(new EventData($"Event 3 added at: {DateTime.Now}"), "sample-key");
await collector.AddAsync(new EventData($"Event 4 added at: {DateTime.Now}"), "sample-key");
}
Verwenden der Bindung an stark typisierte Modelle
Um stark typisierte Modellklassen mit der EventHub-Bindung zu verwenden, wenden Sie den EventHubAttribute
auf den Modellparameter an.
[FunctionName("TriggerSingleModel")]
public static void Run(
[EventHubTrigger("<event_hub_name>", Connection = "<connection_name>")] Dog dog,
ILogger logger)
{
logger.LogInformation($"Who's a good dog? {dog.Name} is!");
}
Senden mehrerer Ereignisse mithilfe von EventHubProducerClient
Sie können auch direkt an das EventHubProducerClient
binden, um die meiste Kontrolle über das sendende Ereignis zu haben.
[FunctionName("BindingToProducerClient")]
public static async Task Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[EventHub("<event_hub_name>", Connection = "<connection_name>")] EventHubProducerClient eventHubProducerClient)
{
// IAsyncCollector allows sending multiple events in a single function invocation
await eventHubProducerClient.SendAsync(new[]
{
new EventData($"Event 1 added at: {DateTime.Now}"),
new EventData($"Event 2 added at: {DateTime.Now}")
});
}
Trigger pro Ereignis
Wenn Sie eine Funktion jedes Mal ausführen möchten, wenn ein Ereignis an Event Hub gesendet wird, wenden Sie die EventHubTriggerAttribute
auf einen oder EventData
-Parameter anstring
.
[FunctionName("TriggerSingle")]
public static void Run(
[EventHubTrigger("<event_hub_name>", Connection = "<connection_name>")] string eventBodyAsString,
ILogger logger)
{
logger.LogInformation($"C# function triggered to process a message: {eventBodyAsString}");
}
Batchtrigger
Um eine Funktion für einen Batch empfangener Ereignisse auszuführen, wenden Sie das EventHubTriggerAttribute
auf einen string[]
- oder EventData[]
-Parameter an.
[FunctionName("TriggerBatch")]
public static void Run(
[EventHubTrigger("<event_hub_name>", Connection = "<connection_name>")] EventData[] events,
ILogger logger)
{
foreach (var e in events)
{
logger.LogInformation($"C# function triggered to process a message: {e.EventBody}");
logger.LogInformation($"EnqueuedTime={e.EnqueuedTime}");
}
}
Problembehandlung
Anleitungen zur Problembehandlung finden Sie unter Überwachen Azure Functions.
Nächste Schritte
Lesen Sie die Einführung in Azure Functions oder erstellen sie eine Azure Function-Anleitung.
Mitwirken
Weitere Informationen zum Erstellen, Testen und Mitwirken zu dieser Bibliothek finden Sie in unserem CONTRIBUTING.md .
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Weitere Informationen finden Sie unter cla.microsoft.com.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.