Trigger di chiamata al servizio Dapr per Funzioni di Azure

Funzioni di Azure può essere attivato su un'invocazione di servizio Dapr usando gli eventi Dapr seguenti.

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.
[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"];
}

Ecco il codice Java per il trigger di chiamata al servizio Dapr:

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

Utilizzare l'oggetto app per registrare il daprInvokeOutput:

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

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

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

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

Nel codice:

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"]

L'esempio seguente illustra un’attivazione dell'invocazione del servizio Dapr, che usa il modello di programmazione Python v2. Per usare daprServiceInvocationTrigger nel codice dell'app per le funzioni Python:

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)

Attributi

Nel modello in-process usare il DaprServiceInvocationTrigger per attivare un'invocazione del servizio Dapr, che supporta le proprietà seguenti.

Parametro Descrizione
MethodName Facoltativo. Nome del metodo che deve essere usato dal chiamante Dapr. Se non specificato, il nome della funzione viene usato come nome del metodo.

Annotazioni

L'annotazione DaprServiceInvocationTrigger consente di creare una funzione che viene richiamata dal runtime Dapr.

Elemento Descrizione
methodName Nome del metodo.

Impostazione

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

Proprietà Descrizione
type Deve essere impostato su daprServiceInvocationTrigger.
name Nome della variabile che rappresenta i dati Dapr nel codice della funzione.

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

Proprietà di function.json Descrizione
type Deve essere impostato su daprServiceInvocationTrigger.
name Nome della variabile che rappresenta i dati Dapr nel codice della funzione.

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

Proprietà Descrizione
method_name Nome della variabile che rappresenta i dati Dapr.

Per esempi completi, vedere la sezione di esempio.

Utilizzo

Per usare un trigger di chiamata al servizio Dapr, vedere altre informazioni sui componenti da usare con il trigger di chiamata al servizio e su come configurarli nella documentazione ufficiale di Dapr.

Per usare daprServiceInvocationTrigger 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.