Megosztás a következőn keresztül:


Dapr Binding kimeneti kötés az Azure Functionshez

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.

Example

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

Execution model Description
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ó: Útmutató a C# Azure Functions izolált feldolgozói modellben való futtatásához.
In-process model 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ó: C# osztálykódtárfüggvények fejlesztése az Azure Functions használatával.

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: 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

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

Attributes

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

Parameter Description Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
BindingName A Dapr-kötés neve. ✔️ ✔️
Operation A konfigurált kötési művelet. ✔️ ✔️
Metadata A metaadat-névtér. ✔️
Data Required. A kötési művelet adatai. ✔️

Annotations

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

Element Description Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
bindingName A Dapr-kötés neve. ✔️ ✔️
output A konfigurált kötési művelet. ✔️ ✔️
metadata A metaadat-névtér. ✔️
data Required. A kötési művelet adatai. ✔️

Configuration

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

Property Description Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
bindingName A kötés neve. ✔️ ✔️
operation A kötési művelet. ✔️ ✔️
metadata A metaadat-névtér. ✔️
data Required. 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 property Description Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
bindingName A kötés neve. ✔️ ✔️
operation A kötési művelet. ✔️ ✔️
metadata A metaadat-névtér. ✔️
data Required. 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.

Property Description Attribútumon keresztül küldhető el Elküldhető a RequestBody-on keresztül
binding_name A kötési esemény neve. ✔️ ✔️
operation A kötési művelet neve/azonosítója. ✔️ ✔️
metadata A metaadat-névtér. ✔️
data Required. 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.

See the Example section for complete examples.

Usage

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
    

Next steps

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