Dapr Binding kimeneti kötés az Azure Functionshez

Fontos

Az Azure Functions Dapr-bővítménye jelenleg előzetes verzióban érhető el, és csak az Azure Container Apps-környezetekben támogatott.

A Dapr kimeneti kötés lehetővé teszi, hogy értéket küldjön egy Dapr kimeneti kötésnek egy függvény végrehajtása során.

A Dapr-bővítmény beállítási és konfigurációs részleteiről a Dapr bővítmény áttekintésében olvashat.

Példa

A C#-függvények a következő C#-módok egyikével hozhatók létre:

Végrehajtási modell Leírás
Izolált feldolgozói modell A függvénykód egy külön .NET-feldolgozófolyamatban fut. A .NET és a .NET-keretrendszer támogatott verzióival használható. További információ: .NET izolált feldolgozói folyamatfüggvények fejlesztése.
Folyamaton belüli modell A függvénykód ugyanabban a folyamatban fut, mint a Functions gazdafolyamata. Csak a .NET hosszú távú támogatási (LTS) verzióit támogatja. További információ: .NET-osztálykódtár-függvények fejlesztése.

Az alábbi példa egy Dapr szolgáltatáshívási eseményindító és egy Dapr kimeneti kötés használatát mutatja be egy kötéskérés olvasásához és feldolgozásához.

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

Az alábbi példa egy függvényt "SendMessagetoKafka" hoz létre a DaprBindingOutput következő kötéssel DaprServiceInvocationTrigger:

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

Az alábbi példában a Dapr kimeneti kötés párosítva van a Dapr meghívási kimeneti eseményindítójával, amelyet az app objektum regisztrál:

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

app.generic('SendMessageToKafka', {
    trigger: trigger.generic({
        type: 'daprServiceInvocationTrigger',
        name: "payload"
    }),
    return: daprBindingOuput,
    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 };
    }
});

Az alábbi példák a Dapr-eseményindítókat mutatják be egy function.json fájlban és a PowerShell-kódban, amely ezeket a kötéseket használja.

A következő function.json fájl:daprBinding

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

A function.json fájltulajdonságokról a Konfiguráció szakaszban talál további információt.

Kódban:

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

Az alábbi példa egy Dapr Binding kimeneti kötést mutat be, amely a v2 Python programozási modellt használja. A Python-függvényalkalmazás kódjában való használathoz @dapp.dapr_binding_output :

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

Attribútumok

A folyamatban lévő modellben az alábbi paramétereket támogató Dapr-kötés kimeneti kötésének definiálásához használja a DaprBinding következő paramétereket:

Paraméter Leírás Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
BindingName A Dapr-kötés neve. ✔️ ✔️
Művelet A konfigurált kötési művelet. ✔️ ✔️
Metaadatok A metaadat-névtér. ✔️
Adatok Szükséges. A kötési művelet adatai. ✔️

Jegyzetek

A DaprBindingOutput széljegyzet lehetővé teszi egy olyan függvény létrehozását, amely kimeneti kötést küld.

Elem Leírás Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
bindingName A Dapr-kötés neve. ✔️ ✔️
Kimeneti A konfigurált kötési művelet. ✔️ ✔️
metaadatok A metaadat-névtér. ✔️
data Szükséges. A kötési művelet adatai. ✔️

Konfiguráció

Az alábbi táblázat a kódban beállított kötéskonfigurációs tulajdonságokat ismerteti.

Tulajdonság Leírás Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
bindingName A kötés neve. ✔️ ✔️
Művelet A kötési művelet. ✔️ ✔️
metaadatok A metaadat-névtér. ✔️
data Szükséges. A kötési művelet adatai. ✔️

Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Leírás Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
bindingName A kötés neve. ✔️ ✔️
Művelet A kötési művelet. ✔️ ✔️
metaadatok A metaadat-névtér. ✔️
data Szükséges. A kötési művelet adatai. ✔️

Az alábbi táblázat a Python-kódban beállított kötéskonfigurációs tulajdonságokat @dapp.dapr_binding_output ismerteti.

Tulajdonság Leírás Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
binding_name A kötési esemény neve. ✔️ ✔️
Művelet A kötési művelet neve/azonosítója. ✔️ ✔️
metaadatok A metaadat-névtér. ✔️
data Szükséges. A kötési művelet adatai. ✔️

Ha a tulajdonságok attribútumokban vannak definiálva, és RequestBodya rendszer prioritást ad a megadott RequestBodyadatoknak.

A teljes példákért tekintse meg a Példa szakaszt .

Használat

A Dapr kimeneti kötésének használatához először állítson be egy Dapr kimeneti kötés összetevőt. A hivatalos Dapr-dokumentációban többet is megtudhat arról, hogy melyik összetevőt használja, és hogyan állíthatja be.

A Python v2-ben való daprBinding használatához állítsa be a projektet a megfelelő függőségekkel.

  1. Virtuális környezet létrehozása és aktiválása.

  2. requirements.text A fájlban adja hozzá a következő sort:

    azure-functions==1.18.0b3
    
  3. Telepítse a Python-kódtárat a terminálban.

    pip install -r .\requirements.txt
    
  4. Módosítsa a local.setting.json fájlt a következő konfigurációval:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Következő lépések

További információ a Dapr szolgáltatáshívásáról.