Associazione di output del binding dapr per Funzioni di Azure

L'associazione di output Dapr consente di inviare un valore a un'associazione di output Dapr durante l'esecuzione di una funzione.

Per informazioni sull'installazione e sulla configurazione dell'estensione Dapr, vedere panoramica dell'estensione Dapr.

Esempio

È possibile creare una funzione C# usando una delle modalità C# seguenti:

Modello di esecuzione Descrizione
Modello di lavoro isolato Il codice della funzione viene eseguito in un processo di lavoro .NET separato. Usare con le versioni supportate di .NET e .NET Framework. Per altre informazioni, vedere Sviluppare funzioni di processo di lavoro isolato .NET.
Modello di processo Il codice della funzione viene eseguito nello stesso processo del processo host di Funzioni. Supporta solo versioni LTS (Long Term Support) di .NET. Per altre informazioni, vedere Sviluppare funzioni della libreria di classi .NET.

L'esempio seguente illustra l'uso di un trigger di chiamata al servizio Dapr e di un'associazione di output Dapr per leggere ed elaborare una richiesta di associazione.

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

Nell'esempio seguente viene creata una funzione "SendMessagetoKafka" usando l'associazione DaprBindingOutput con 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;
}

Nell'esempio seguente, l'associazione di output Dapr viene associata al trigger di output Dapr invoke, registrato dall'oggetto app:

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

Gli esempi seguenti illustrano i trigger Dapr in un file function.json e nel codice di PowerShell che usano tali associazioni.

Ecco il file function.json per daprBinding:

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

Per altre informazioni sulle proprietà dei file function.json, vedere la sezione configurazione.

Nel codice:

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

L'esempio seguente mostra un'associazione di output dapr Binding, che usa il modello di programmazione Python v2. Per usare @dapp.dapr_binding_output nel codice dell'app per le funzioni Python:

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

Attributi

Nel modello in-process usare il DaprBinding per definire un'associazione di output di associazione Dapr, che supporta questi parametri:

Parametro Descrizione Può essere inviato tramite Attributo Può essere inviato tramite RequestBody
BindingName Nome dell'associazione Dapr. ✔️ ✔️
Operazione Operazione di associazione configurata. ✔️ ✔️
Metadati UFX Spazio dei nomi dei metadati. ✔️
Dati Obbligatorio. Dati per l'operazione di associazione. ✔️

Annotazioni

L'annotazione DaprBindingOutput consente di creare una funzione che invia un'associazione di output.

Elemento Descrizione Può essere inviato tramite Attributo Può essere inviato tramite RequestBody
bindingName Nome dell'associazione Dapr. ✔️ ✔️
output Operazione di associazione configurata. ✔️ ✔️
metadata Spazio dei nomi dei metadati. ✔️
data Obbligatorio. Dati per l'operazione di associazione. ✔️

Impostazione

Nella tabella seguente vengono illustrate le proprietà di configurazione dell'associazione impostate nel codice.

Proprietà Descrizione Può essere inviato tramite Attributo Può essere inviato tramite RequestBody
bindingName Nome dell'associazione. ✔️ ✔️
operation Operazione di associazione. ✔️ ✔️
metadata Spazio dei nomi dei metadati. ✔️
data Obbligatorio. Dati per l'operazione di associazione. ✔️

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.

Proprietà di function.json Descrizione Può essere inviato tramite Attributo Può essere inviato tramite RequestBody
bindingName Nome dell'associazione. ✔️ ✔️
operation Operazione di associazione. ✔️ ✔️
metadata Spazio dei nomi dei metadati. ✔️
data Obbligatorio. Dati per l'operazione di associazione. ✔️

La tabella seguente illustra le proprietà di configurazione dell'associazione per @dapp.dapr_binding_output impostate nel codice Python.

Proprietà Descrizione Può essere inviato tramite Attributo Può essere inviato tramite RequestBody
binding_name Nome dell'evento di associazione. ✔️ ✔️
operation Nome/identificatore dell'operazione di associazione. ✔️ ✔️
metadata Spazio dei nomi dei metadati. ✔️
data Obbligatorio. Dati per l'operazione di associazione. ✔️

Se le proprietà sono definite sia in Attributi che in RequestBody, la priorità viene assegnata ai dati forniti in RequestBody.

Per esempi completi, vedere la sezione di esempio.

Utilizzo

Per usare l'associazione di output Dapr, iniziare configurando un componente di associazione di output Dapr. Per altre informazioni sul componente da usare e su come configurarlo, vedere la documentazione ufficiale di Dapr.

Per usare daprBinding in Python v2, configurare il progetto con le dipendenze corrette.

  1. Creare e attivare un ambiente virtuale.

  2. Nel file requirements.text aggiungere la riga seguente:

    azure-functions==1.18.0b3
    
  3. Nel terminale installare la libreria Python.

    pip install -r .\requirements.txt
    
  4. Modificare il file local.setting.json con la configurazione seguente:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Passaggi successivi

Altre informazioni sulla chiamata al servizio Dapr.