Freigeben über


Dapr Binding-Ausgabebindung für Azure Functions

Mit der Dapr-Ausgabebindung können Sie während einer Funktionsausführung einen Wert an eine Dapr-Ausgabebindung senden.

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

Example

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

Execution model Description
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 im Handbuch zum Ausführen von C#-Azure-Funktionen im isolierten Arbeitsmodell.
In-process model 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 C#-Klassenbibliotheksfunktionen mithilfe von Azure Functions.

Das folgende Beispiel veranschaulicht die Verwendung eines Dapr-Dienstaufruftriggers und einer Dapr-Ausgabebindung zum Lesen und Verarbeiten einer Bindungsanforderung.

[FunctionName("SendMessageToKafka")]
public static async Task Run(
    [DaprServiceInvocationTrigger] JObject payload,
    [DaprBinding(BindingName = "%KafkaBindingName%", Operation = "create")] IAsyncCollector<object> messages,
    ILogger log)
{
    log.LogInformation("C#  function processed a SendMessageToKafka request.");
    await messages.AddAsync(payload);
}

Im folgenden Beispiel wird eine "SendMessageToKafka" -Funktion mithilfe der DaprBindingOutput -Bindung mit dem Folgenden DaprServiceInvocationTrigger erstellt:

@FunctionName("SendMessageToKafka")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "SendMessageToKafka") 
        String payload,
        @DaprBindingOutput(
            bindingName = "%KafkaBindingName%", 
            operation = "create")
        OutputBinding<String> product,
        final ExecutionContext context) {
    context.getLogger().info("Java  function processed a SendMessageToKafka request.");
    product.setValue(payload);

    return payload;
}

Im folgenden Beispiel wird die Ausgabebindung des Dapr-Zustands mit einem Dapr-Aufrufausgabe-Trigger gekoppelt, der vom app-Objekt registriert wird:

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

app.generic('SendMessageToKafka', {
    trigger: trigger.generic({
        type: 'daprServiceInvocationTrigger',
        name: "payload"
    }),
    return: daprBindingOutput,
    handler: async (request, context) => {
        context.log("Node function processed a SendMessageToKafka request from the Dapr Runtime.");
        context.log(context.triggerMetadata.payload)

        return { "data": context.triggerMetadata.payload };
    }
});

The following examples show Dapr triggers in a function.json file and PowerShell code that uses those bindings.

Here's the function.json file for daprBinding:

{
  "bindings": 
    {
      "type": "daprBinding",
      "direction": "out",
      "bindingName": "%KafkaBindingName%",
      "operation": "create",
      "name": "messages"
    }
}

For more information about function.json file properties, see the Configuration section.

In code:

using namespace System.Net

# Input bindings are passed in via param block.
param($req, $TriggerMetadata)

Write-Host "Powershell SendMessageToKafka processed a request."

$invoke_output_binding_req_body = @{
    "data" = $req
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name messages -Value $invoke_output_binding_req_body

Das folgende Beispiel zeigt eine Dapr-Ausgabebindung, die das v2 Python-Programmiermodell verwendet. So verwenden Sie @dapp.dapr_binding_output in Ihrem Python-Funktions-App-Code:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="SendMessageToKafka")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="SendMessageToKafka")
@app.dapr_binding_output(arg_name="messages", binding_name="%KafkaBindingName%", operation="create")
def main(payload: str, messages: func.Out[bytes]) -> None:
    logging.info('Python processed a SendMessageToKafka request from the Dapr Runtime.')
    messages.set(json.dumps({"data": payload}).encode('utf-8'))

Attributes

In the in-process model, use the DaprBinding to define a Dapr binding output binding, which supports these parameters:

Parameter Description Kann per Attribut gesendet werden Kann über RequestBody gesendet werden
BindingName Der Name der Dapr-Bindung. ✔️ ✔️
Operation Der konfigurierte Bindungsvorgang. ✔️ ✔️
Metadata Der Metadata Namespace. ✔️
Data Required. Die Daten für den Bindungsvorgang. ✔️

Annotations

Mit der Anmerkung DaprBindingOutput können Sie eine Funktion erstellen, die eine Ausgabebindung sendet.

Element Description Kann per Attribut gesendet werden Kann über RequestBody gesendet werden
bindingName Der Name der Dapr-Bindung. ✔️ ✔️
output Der konfigurierte Bindungsvorgang. ✔️ ✔️
metadata Der Metadata Namespace. ✔️
data Required. Die Daten für den Bindungsvorgang. ✔️

Configuration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie im Code festlegen.

Property Description Kann per Attribut gesendet werden Kann über RequestBody gesendet werden
bindingName Der Name der Bindung. ✔️ ✔️
operation Der Bindungsvorgang. ✔️ ✔️
metadata Der Metadata Namespace. ✔️
data Required. Die Daten für den Bindungsvorgang. ✔️

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

function.json property Description Kann per Attribut gesendet werden Kann über RequestBody gesendet werden
bindingName Der Name der Bindung. ✔️ ✔️
operation Der Bindungsvorgang. ✔️ ✔️
metadata Der Metadata Namespace. ✔️
data Required. Die Daten für den Bindungsvorgang. ✔️

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

Property Description Kann per Attribut gesendet werden Kann über RequestBody gesendet werden
binding_name Der Name des Bindungsereignisses. ✔️ ✔️
operation Der Name/Bezeichner des Bindungsvorgangs. ✔️ ✔️
metadata Der Metadata Namespace. ✔️
data Required. Die Daten für den Bindungsvorgang. ✔️

Wenn Eigenschaften sowohl in Attributen als auch in RequestBody definiert sind, haben die in RequestBody bereitgestellten Daten höhere Priorität.

See the Example section for complete examples.

Usage

Um den Dapr-Ausgabebindung zu verwenden, richten Sie zunächst eine Dapr-Ausgabebindungskomponente ein. In der offiziellen Dapr-Dokumentation erfahren Sie mehr darüber, welche Komponente Sie verwenden sollten und wie Sie diese einrichten können.

Um daprBinding 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 local.setting.json-Datei mit der folgenden Konfiguration:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

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