Share via


Dapr-Dienstaufruftrigger für Azure Functions

Wichtig

Die Dapr-Erweiterung für Azure Functions befindet sich derzeit in der Vorschau und wird nur in Azure Container Apps-Umgebungen unterstützt.

Azure Functions kann mithilfe der folgenden Dapr-Ereignisse für einen Dapr-Dienstaufruf ausgelöst werden.

Informationen zu Setup- und Konfigurationsdetails der Dapr-Erweiterung finden Sie in der Dapr-Erweiterungsübersicht.

Beispiel

Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:

Ausführungsmodell Beschreibung
Isoliertes Workermodell Ihr Funktionscode wird in einem separaten .NET-Workerprozess ausgeführt. Verwenden Sie dazu unterstützte Versionen von .NET und .NET Framework. Weitere Informationen finden Sie unter Entwickeln von isolierten .NET-Workerprozessfunktionen.
In-Process-Modell Ihr Funktionscode wird im gleichen Prozess wie der Functions-Hostprozess ausgeführt. Unterstützt nur LTS-Versionen (Long Term Support) von .NET. Weitere Informationen finden Sie unter Entwickeln von .NET-Klassenbibliotheksfunktionen.
[FunctionName("CreateNewOrder")]
public static void Run(
    [DaprServiceInvocationTrigger] JObject payload,
    [DaprState("%StateStoreName%", Key = "order")] out JToken order,
    ILogger log)
{
    log.LogInformation("C# function processed a CreateNewOrder request from the Dapr Runtime.");

    // payload must be of the format { "data": { "value": "some value" } }
    order = payload["data"];
}

Im Folgenden sehen Sie den Java-Code für den Dapr-Dienstaufruftrigger:

@FunctionName("CreateNewOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "CreateNewOrder") 
)

Verwenden Sie das app Objekt, um folgendes daprInvokeOutputzu registrieren:

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

app.generic('InvokeOutputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['POST'],
        route: "invoke/{appId}/{methodName}",
        name: "req"
    }),
    return: daprInvokeOutput,
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const payload = await request.text();
        context.log(JSON.stringify(payload));

        return { body: payload };
    }
});

Die folgenden Beispiele zeigen Dapr-Trigger in der Datei function.json und PowerShell-Code, der diese Bindungen verwendet.

Hier sehen Sie die Datei function.json für daprServiceInvocationTrigger:

{
  "bindings": [
    {
      "type": "daprServiceInvocationTrigger",
      "name": "payload",
      "direction": "in"
    }
  ]
}

Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration.

In Code:

using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq

param (
    $payload
)

# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a CreateNewOrder request from the Dapr Runtime."

# Payload must be of the format { "data": { "value": "some value" } }

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $payload| ConvertTo-Json

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name order -Value $payload["data"]

Das folgende Beispiel zeigt einen Dapr-Dienstaufruftrigger, der das Python v2-Programmiermodell verwendet. So verwenden Sie daprServiceInvocationTrigger in Ihrem Python-Funktions-App-Code

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveOrder")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveOrder")
@app.dapr_state_input(arg_name="data", state_store="statestore", key="order")
def main(payload, data: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveOrder  --data '{}'
    logging.info('Python function processed a RetrieveOrder request from the Dapr Runtime.')
    logging.info(data)

Attribute

Verwenden Sie DaprServiceInvocationTrigger im In-Process-Modell, um eine Dapr-Dienstaufrufbindung auszulösen, die die folgenden Eigenschaften unterstützt:

Parameter Beschreibung
MethodName Optional. Der Name der Methode, die die aufrufende Dapr-Funktion verwenden sollte. Falls nicht angegeben, wird der Name der Funktion als Methodenname verwendet.

Anmerkungen

Mit der Anmerkung DaprServiceInvocationTrigger können Sie eine Funktion erstellen, die von der Dapr-Runtime aufgerufen wird.

Element Beschreibung
methodName Der Methodenname.

Konfiguration

In der folgenden Tabelle werden die Bindungskonfigurationseigenschaften erläutert, die Sie im Code festlegen.

Eigenschaft Beschreibung des Dataflows
type Muss auf daprServiceInvocationTrigger festgelegt sein.
name Der Name der Variablen, die die Dapr-Daten im Funktionscode darstellt

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.

function.json-Eigenschaft BESCHREIBUNG
type Muss auf daprServiceInvocationTrigger festgelegt sein.
name Der Name der Variablen, die die Dapr-Daten im Funktionscode darstellt

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften für @dapp.dapr_service_invocation_trigger, die Sie im Python-Code festlegen.

Eigenschaft Beschreibung
method_name Der Name der Variablen, die die Dapr-Daten darstellt.

Vollständige Beispiele finden Sie im Abschnitt Beispiele.

Verwendung

Wenn Sie einen Dapr-Dienstaufruftrigger verwenden möchten, erfahren Sie in der offiziellen Dapr-Dokumentation mehr darüber, welche Komponenten mit dem Dienstaufruftrigger verwendet werden sollen und wie sie eingerichtet werden.

Um daprServiceInvocationTrigger in Python v2 zu verwenden, richten Sie Ihr Projekt mit den richtigen Abhängigkeiten ein.

  1. Erstellen und Aktivieren einer virtuellen Umgebung

  2. Fügen Sie in Ihrer requirements.text-Datei die folgende Zeile hinzu:

    azure-functions==1.18.0b3
    
  3. Installieren Sie im Terminal die Python-Bibliothek.

    pip install -r .\requirements.txt
    
  4. Ändern Sie Ihre Datei local.setting.json mit der folgenden Konfiguration:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Nächste Schritte

Erfahren Sie mehr über den Aufruf des Dapr-Dienstes.