Azure Event Hubs utdatabindning för Azure Functions

Den här artikeln beskriver hur du arbetar med bindningar för Azure Event Hubs för Azure Functions. Azure Functions stöder utlösar- och utdatabindningar för Event Hubs.

Information om konfiguration och konfigurationsinformation finns i översikten.

Använd Event Hubs-utdatabindningen för att skriva händelser till en händelseström. Du måste ha behörighet att skicka till en händelsehubb för att kunna skicka händelser till den.

Kontrollera att nödvändiga paketreferenser finns på plats innan du försöker implementera en utdatabindning.

Viktigt!

Den här artikeln använder flikar för att stödja flera versioner av Node.js programmeringsmodellen. V4-modellen är allmänt tillgänglig och är utformad för att ha en mer flexibel och intuitiv upplevelse för JavaScript- och TypeScript-utvecklare. Mer information om hur v4-modellen fungerar finns i utvecklarguiden Azure Functions Node.js. Mer information om skillnaderna mellan v3 och v4 finns i migreringsguiden.

Azure Functions stöder två programmeringsmodeller för Python. Hur du definierar dina bindningar beror på din valda programmeringsmodell.

Med programmeringsmodellen Python v2 kan du definiera bindningar med hjälp av dekoratörer direkt i din Python funktionskod. Mer information finns i utvecklarguiden Python.

Den här artikeln stöder båda programmeringsmodellerna.

Exempel

Go-stöd finns för närvarande inte tillgängligt för denna bindning.

I följande exempel visas en C#-funktion som skriver en meddelandesträng till en händelsehubb med metodens returvärde som utdata:

[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;
}

I följande exempel visas en timerutlöst TypeScript-funktion som skickar ett enda meddelande till en händelsehubb:

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,
});

Om du vill mata ut flera meddelanden returnerar du en matris i stället för ett enda objekt. Till exempel:

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

I följande exempel visas en timerutlöst JavaScript-funktion som skickar ett enda meddelande till en händelsehubb:

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}`;
    },
});

Om du vill mata ut flera meddelanden returnerar du en matris i stället för ett enda objekt. Till exempel:

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

Slutför PowerShell-exempel väntar.

I följande exempel visas en utlösarbindning för händelsehubben och en Python funktion som använder bindningen. Funktionen skriver ett meddelande till en händelsehubb. Exemplet beror på om du använder programmeringsmodellen v1 eller v2 Python.

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'

Här är Python kod som skickar flera meddelanden:

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")

I följande exempel visas en Java funktion som skriver ett meddelande som innehåller den aktuella tiden till en händelsehubb.

@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();
 }

I Java functions runtime library använder du @EventHubOutput-kommentaren på parametrar vars värde skulle publiceras till Event Hubs. Parametern ska vara av typen OutputBinding<T> , där T är en POJO eller någon intern Java typ.

Attribut

C#-bibliotek i både processprocess och isolerad arbetsprocess använder attribut för att konfigurera bindningen. C#-skriptet använder i stället en function.json konfigurationsfil enligt beskrivningen i C#-skriptguiden.

Använd [EventHubOutputAttribute] för att definiera en utdatabindning till en händelsehubb som stöder följande egenskaper.

Parametrar beskrivning
EventHubName Namnet på händelsehubben. När händelsehubbens namn också finns i reťazec pripojenia åsidosätter det värdet den här egenskapen vid körning.
Anslutning Namnet på en appinställning eller inställningssamling som anger hur du ansluter till Event Hubs. Mer information finns i Anslutningar.

Dekoratörer

Applies endast till programmeringsmodellen Python v2.

För Python v2-funktioner som definierats med hjälp av en dekoratör stöds dessa egenskaper för event_hub_output:

Fastighet beskrivning
arg_name Variabelnamnet som används i funktionskoden som representerar händelsen.
event_hub_name namnet på händelsehubben. När händelsehubbens namn också finns i reťazec pripojenia åsidosätter det värdet den här egenskapen vid körning.
connection Namnet på en appinställning eller inställningssamling som anger hur du ansluter till Event Hubs. Mer information finns i Anslutningar.

Information om Python funktioner som definieras med hjälp av function.json finns i avsnittet Configuration.

Kommentarer

I Java functions runtime library använder du EventHubOutput anteckning på parametrar vars värde skulle publiceras till Event Hubs. Följande inställningar stöds i kommentaren:

Konfiguration

Applies endast till programmeringsmodellen Python v1.

I följande tabell förklaras de egenskaper som du kan ange för objektet options som skickas output.eventHub() till metoden.

Fastighet beskrivning
eventHubName Namnet på händelsehubben. När händelsehubbens namn också finns i reťazec pripojenia åsidosätter det värdet den här egenskapen vid körning.
samband Namnet på en appinställning eller inställningssamling som anger hur du ansluter till Event Hubs. Mer information finns i Anslutningar.

I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i function.json-filen, som skiljer sig beroende på körningsversion.

function.json egenskap beskrivning
typ Måste anges till eventHub.
riktning Måste anges till out. Den här parametern anges automatiskt när du skapar bindningen i Azure portalen.
Namn Variabelnamnet som används i funktionskoden som representerar händelsen.
eventHubName Funktioner 2.x och senare. Namnet på händelsehubben. När händelsehubbens namn också finns i reťazec pripojenia åsidosätter det värdet den här egenskapen vid körning.
samband Namnet på en appinställning eller inställningssamling som anger hur du ansluter till Event Hubs. Mer information finns i Anslutningar.

När du utvecklar lokalt lägger du till dina programinställningar i den local.settings.json filen i Values samlingen.

Förbrukning

Vilken parametertyp som stöds av Event Hubs-utdatabindningen beror på functions-körningsversionen, tilläggspaketversionen och den C#-modalitet som används.

När du vill att funktionen ska skriva en enskild händelse kan Event Hubs-utdatabindningen binda till följande typer:

Typ beskrivning
string Händelsen som en sträng. Använd när händelsen är enkel text.
byte[] Byte för händelsen.
JSON-serialiserbara typer Ett objekt som representerar händelsen. Functions försöker serialisera en vanlig CLR-objekttyp (POCO) till JSON-data.

När du vill att funktionen ska skriva flera händelser kan Event Hubs-utdatabindningen binda till följande typer:

Typ beskrivning
T[] där T är en av de enskilda händelsetyperna En matris som innehåller flera händelser. Varje post representerar en händelse.

För andra utdatascenarier skapar och använder du en EventHubProducerClient med andra typer från Azure. Messaging.EventHubs direkt. Se Register Azure-klienter för ett exempel på hur du använder beroendeinmatning för att skapa en klienttyp från Azure SDKs.

Det finns två alternativ för att mata ut ett Event Hubs-meddelande från en funktion med hjälp av EventHubOutput-kommentaren:

  • Returvärde: Genom att använda anteckningen på själva funktionen sparas funktionens returvärde som ett Event Hubs-meddelande.

  • Imperative: Om du vill ange meddelandevärdet explicit använder du anteckningen på en specifik parameter av typen OutputBinding<T>, där T är en POJO eller någon intern Java typ. Med den här konfigurationen bevarar överföringen av ett värde till setValue metoden värdet som ett Event Hubs-meddelande.

Slutför PowerShell-exempel väntar.

Få åtkomst till utdatameddelandet genom att returnera värdet direkt eller med hjälp av context.extraOutputs.set().

Det finns två alternativ för att mata ut ett Event Hubs-meddelande från en funktion:

  • Returvärde: Ange name egenskapen i function.json till $return. Med den här konfigurationen sparas funktionens returvärde som ett Event Hubs-meddelande.

  • Imperativ: Skicka ett värde till den angivna metoden för parametern som deklarerats som en Out-typ . Värdet som skickas till set sparas som ett Event Hubs-meddelande.

Utdatafunktionsparametern måste definieras som func.Out[func.EventHubEvent] eller func.Out[List[func.EventHubEvent]]. Mer information finns i utdataexemplet .

anslutningar

Egenskapen connection är inställd på en nyckel i applikationsinställningarna som returnerar ett värde som används av Functions-runtimen för att ansluta till Event Hubs-namnrymden som innehåller händelsehubben som används av tillägget. Värdet på anslutningsegenskapsinställningen beror på typen av anslutning:

  • Managed identity-anslutning: Egenskapen connection<CONNECTION_NAME_PREFIX> delas av en grupp inställningar som tillsammans definierar en identitetsbaserad anslutning till namnrymden. För mer information, se Definiera identitetskopplingar.
  • Key Vault-referens: Egendomsinställningen connection returnerar en Azure Key Vault-referens till platsen där reťazec pripojenia underhålls centralt. För mer information, se Definiera Key Vault-anslutningar.
  • App Configuration Reference: Egenskapsinställningen connection returnerar en Azure App Configuration-referens som returnerar en reťazec pripojenia eller en Key Vault-referens. För mer information, se Azure App Configuration i artikeln om anslutningar.
  • Connection string: Egenskapsinställningen connection returnerar den faktiska reťazec pripojenia för namnrymden. Connection string måste vara för ett Event Hubs-namnområde, inte själva händelsehubben. Eftersom reťazec pripojenia innehåller delade hemliga nycklar bör du överväga att använda en managed identity-anslutning när det är möjligt. För mer information, se Definiera kopplingar.

För att lära dig mer om bindningsanslutningar, se Hantera anslutning i Azure Functions.

För att lära dig hur du hämtar reťazec pripojenia för ditt Event Hubs-namnrymd, se Get an Event Hubs reťazec pripojenia.

Undantag och returkoder

Bindning Referens
Event Hubs Driftguide

Nästa steg