Azure Event Hubs uitvoerbinding voor Azure Functions

In dit artikel wordt uitgelegd hoe u werkt met Azure Event Hubs bindingen voor Azure Functions. Azure Functions ondersteunt trigger- en uitvoerbindingen voor Event Hubs.

Zie het overzicht voor informatie over het instellen en configureren van details.

Gebruik de Event Hubs-uitvoerbinding om gebeurtenissen naar een gebeurtenisstroom te schrijven. U moet een verzendmachtiging voor een Event Hub hebben om er gebeurtenissen naar te kunnen schrijven.

Zorg ervoor dat de vereiste pakketverwijzingen aanwezig zijn voordat u een uitvoerbinding implementeert.

Belangrijk

In dit artikel worden tabbladen gebruikt ter ondersteuning van meerdere versies van het Node.js programmeermodel. Het v4-model is algemeen beschikbaar en is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Raadpleeg de Azure Functions Node.js ontwikkelaarshandleiding voor meer informatie over de werking van het v4-model. Raadpleeg de migratiehandleiding voor meer informatie over de verschillen tussen v3 en v4.

Azure Functions ondersteunt twee programmeermodellen voor Python. De manier waarop u uw bindingen definieert, is afhankelijk van het gekozen programmeermodel.

Met het Python v2-programmeermodel kunt u bindingen definiëren met behulp van decorators rechtstreeks in uw Python functiecode. Zie de Python ontwikkelaarshandleiding voor meer informatie.

Dit artikel ondersteunt beide programmeermodellen.

Opmerking

Go-ondersteuning is momenteel niet beschikbaar voor deze binding.

In het volgende voorbeeld ziet u een C#-functie waarmee een berichttekenreeks naar een Event Hub wordt geschreven, met behulp van de retourwaarde van de methode als uitvoer:

[Function(nameof(EventHubFunction))]
[FixedDelayRetry(5, "00:00:10")]
[EventHubOutput("dest", Connection = "EventHubConnection")]
public string EventHubFunction(
    [EventHubTrigger("src", Connection = "EventHubConnection")] string[] input,
    FunctionContext context)
{
    _logger.LogInformation("First Event Hubs triggered message: {msg}", input[0]);

    var message = $"Output message created at {DateTime.Now}";
    return message;
}

In het volgende voorbeeld ziet u een door een timer geactiveerde TypeScript-functie waarmee één bericht naar een Event Hub wordt verzonden:

import { app, InvocationContext, output, Timer } from '@azure/functions';

export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<string> {
    const timeStamp = new Date().toISOString();
    return `Message created at: ${timeStamp}`;
}

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: output.eventHub({
        eventHubName: 'myeventhub',
        connection: 'MyEventHubSendAppSetting',
    }),
    handler: timerTrigger1,
});

Als u meerdere berichten wilt uitvoeren, retourneert u een matrix in plaats van één object. Voorbeeld:

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

In het volgende voorbeeld ziet u een door een timer geactiveerde JavaScript-functie waarmee één bericht naar een Event Hub wordt verzonden:

const { app, output } = require('@azure/functions');

const eventHubOutput = output.eventHub({
    eventHubName: 'myeventhub',
    connection: 'MyEventHubSendAppSetting',
});

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: eventHubOutput,
    handler: (myTimer, context) => {
        const timeStamp = new Date().toISOString();
        return `Message created at: ${timeStamp}`;
    },
});

Als u meerdere berichten wilt uitvoeren, retourneert u een matrix in plaats van één object. Voorbeeld:

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

Volledige PowerShell-voorbeelden zijn in behandeling.

In het volgende voorbeeld ziet u een event hub-triggerbinding en een Python-functie die gebruikmaakt van de binding. De functie schrijft een bericht naar een Event Hub. Het voorbeeld is afhankelijk van of u het v1 of v2 Python programmeermodel gebruikt.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
                      event_hub_name="<EVENT_HUB_NAME>",
                      connection="<CONNECTION_SETTING>")
def eventhub_output(req: func.HttpRequest, event: func.Out[str]):
    body = req.get_body()
    if body is not None:
        event.set(body.decode('utf-8'))
    else:    
        logging.info('req body is none')
    return 'ok'

Hier volgt Python code waarmee meerdere berichten worden verzonden:

import logging
import azure.functions as func
from typing import List

app = func.FunctionApp()

@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
                      event_hub_name="<EVENT_HUB_NAME>",
                      connection="<CONNECTION_SETTING>")

def eventhub_output(req: func.HttpRequest, event: func.Out[List[str]]) -> func.HttpResponse:
    my_messages=["message1", "message2","message3"]
    event.set(my_messages)
    return func.HttpResponse(f"Messages sent")

In het volgende voorbeeld ziet u een Java functie waarmee een bericht met de huidige tijd naar een Event Hub wordt geschreven.

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

Gebruik in de Java functions runtime-bibliotheek de aantekening @EventHubOutput voor parameters waarvan de waarde naar Event Hubs zou worden gepubliceerd. De parameter moet van het type OutputBinding<T> zijn, waarbij T een POJO of een systeemeigen Java type is.

Kenmerken

Zowel in-processals geïsoleerde werkproces C#-bibliotheken gebruiken kenmerk om de binding te configureren. C#-script maakt in plaats daarvan gebruik van een function.json configuratiebestand, zoals beschreven in de handleiding voor C#-scripts.

Gebruik [EventHubOutputAttribute] om een uitvoerbinding te definiëren voor een Event Hub, die de volgende eigenschappen ondersteunt.

Parameterwaarden Beschrijving
EventHubName De naam van de event hub. Wanneer de event hub-naam ook aanwezig is in de verbindingsreeks, wordt deze eigenschap tijdens runtime overschreven.
Verbinding De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met Event Hubs. Zie Verbindingen voor meer informatie.

Decorateurs

Alleen aan het Python v2-programmeermodel.

Voor Python v2-functies die zijn gedefinieerd met behulp van een decorator, worden deze eigenschappen ondersteund voor event_hub_output:

Eigenschappen Beschrijving
arg_name De naam van de variabele die in functiecode wordt gebruikt, vertegenwoordigt de gebeurtenis.
event_hub_name hij heet de Event Hub. Wanneer de event hub-naam ook aanwezig is in de verbindingsreeks, wordt deze eigenschap tijdens runtime overschreven.
connection De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met Event Hubs. Zie Verbindingen voor meer informatie.

Zie de sectie Configuration voor Python functies die zijn gedefinieerd met behulp van function.json.

Aantekeningen

Gebruik in de runtimebibliotheek van Java functions de EventHubOutput aantekening voor parameters waarvan de waarde naar Event Hubs zou worden gepubliceerd. De volgende instellingen worden ondersteund voor de aantekening:

Configuratie

Alleen aan het programmeermodel Python v1.

In de volgende tabel worden de eigenschappen uitgelegd die u kunt instellen voor het options object dat aan de output.eventHub() methode is doorgegeven.

Eigenschappen Beschrijving
eventHubName De naam van de event hub. Wanneer de event hub-naam ook aanwezig is in de verbindingsreeks, wordt deze eigenschap tijdens runtime overschreven.
verbinding De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met Event Hubs. Zie Verbindingen voor meer informatie.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u hebt ingesteld in het function.json-bestand , wat verschilt per runtime-versie.

function.json-eigenschap Beschrijving
soort Moet worden ingesteld op eventHub.
richting Moet worden ingesteld op out. Deze parameter wordt automatisch ingesteld wanneer u de binding maakt in de Azure-portal.
naam De naam van de variabele die in functiecode wordt gebruikt, vertegenwoordigt de gebeurtenis.
eventHubName Functions 2.x en hoger. De naam van de event hub. Wanneer de event hub-naam ook aanwezig is in de verbindingsreeks, wordt deze eigenschap tijdens runtime overschreven.
verbinding De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met Event Hubs. Zie Verbindingen voor meer informatie.

Wanneer u lokaal ontwikkelt, voegt u uw toepassingsinstellingen toe aan het local.settings.json-bestand in de Values verzameling.

Gebruik

Het parametertype dat wordt ondersteund door de Event Hubs-uitvoerbinding, is afhankelijk van de runtimeversie van Functions, de versie van het extensiepakket en de gebruikte C#-modaliteit.

Wanneer u wilt dat de functie één gebeurtenis schrijft, kan de Event Hubs-uitvoerbinding worden gekoppeld aan de volgende typen:

Typologie Beschrijving
string De gebeurtenis als een tekenreeks. Gebruik deze tekst wanneer de gebeurtenis eenvoudige tekst is.
byte[] De bytes van de gebeurtenis.
JSON serialiseerbare typen Een object dat de gebeurtenis vertegenwoordigt. Functions probeert een eenvoudig oud CLR-objecttype (POCO) te serialiseren in JSON-gegevens.

Wanneer u wilt dat de functie meerdere gebeurtenissen schrijft, kan de Event Hubs-uitvoerbinding worden gekoppeld aan de volgende typen:

Typologie Beschrijving
T[] waarbij T een van de gebeurtenistypen voor één gebeurtenis is Een matrix met meerdere gebeurtenissen. Elke vermelding vertegenwoordigt één gebeurtenis.

Voor andere uitvoerscenario's maakt en gebruikt u een EventHubProducerClient met andere typen uit Azure. Messaging.EventHubs rechtstreeks. Zie Register Azure clients voor een voorbeeld van het gebruik van afhankelijkheidsinjectie om een clienttype te maken op basis van de Azure SDK.

Er zijn twee opties voor het uitvoeren van een Event Hubs-bericht vanuit een functie met behulp van de annotatie eventHubOutput :

  • Retourwaarde: Door de aantekening toe te passen op de functie zelf, wordt de retourwaarde van de functie behouden als een Event Hubs-bericht.

  • Imperative: Als u de berichtwaarde expliciet wilt instellen, past u de aantekening toe op een specifieke parameter van het type OutputBinding<T>, waarbij T een POJO of een systeemeigen Java type is. Met deze configuratie wordt de waarde doorgegeven aan de setValue methode als een Event Hubs-bericht.

Volledige PowerShell-voorbeelden zijn in behandeling.

Open het uitvoerbericht door de waarde rechtstreeks of met behulp van context.extraOutputs.set().

Er zijn twee opties voor het uitvoeren van een Event Hubs-bericht vanuit een functie:

  • Retourwaarde: Stel de name eigenschap in function.json in op $return. Met deze configuratie blijft de retourwaarde van de functie behouden als een Event Hubs-bericht.

  • Imperatief: Geef een waarde door aan de ingestelde methode van de parameter die is gedeclareerd als een Out-type . De doorgegeven set waarde wordt behouden als een Event Hubs-bericht.

De parameter van de uitvoerfunctie moet worden gedefinieerd als func.Out[func.EventHubEvent] of func.Out[List[func.EventHubEvent]]. Raadpleeg het uitvoervoorbeeld voor meer informatie.

Connecties

De connection eigenschap wordt ingesteld op een sleutel in applicatieinstellingen die een waarde teruggeeft die door de Functions-runtime wordt gebruikt om verbinding te maken met de Event Hubs-naamruimte die de event hub bevat die door de extensie wordt gebruikt. De waarde van de connectie-eigenschapsinstelling hangt af van het type verbinding:

  • Beheerde identiteitsverbinding: De connection eigenschap wordt <CONNECTION_NAME_PREFIX> gedeeld door een groep instellingen die samen een identiteitsgebaseerde verbinding met de naamruimte definiëren. Voor meer informatie, zie Definieer identiteitsverbindingen.
  • Key Vault-referentie: De connection property-instelling geeft een Azure Key Vault-referentie terug naar de locatie waar de verbindingsreeks centraal wordt onderhouden. Voor meer informatie, zie Define Key Vault-verbindingen.
  • App Configuration referentie: De connection property-instelling geeft een Azure App Configuration-referentie terug die een verbindingsreeks of een Key Vault-referentie teruggeeft. Voor meer informatie, zie Azure App Configuration in het artikel over verbindingen.
  • Connection string: De connection property-instelling geeft de daadwerkelijke verbindingsreeks van de naamspace terug. De verbindingsreeks moet voor een Event Hubs-naamruimte zijn, niet voor de Event Hub zelf. Omdat de verbindingsreeks gedeelde geheime sleutels bevat, zou je moeten overwegen een managed identity-verbinding te gebruiken, waar mogelijk. Voor meer informatie, zie Verbindingen definiëren.

Voor meer informatie over bindingsverbindingen, zie Verbinding beheren in Azure Functions.

Om te leren hoe je de verbindingsreeks voor je Event Hubs-naamruimte kunt verkrijgen, zie Get an Event Hubs verbindingsreeks.

Uitzonderingen en retourcodes

Verbindend Verwijzing
Evenement Hubs Operations Guide (Bedieningshandleiding)

Volgende stappen