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.
È 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)
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. |
L'annotazione DaprServiceInvocationTrigger
consente di creare una funzione che viene richiamata dal runtime Dapr.
Elemento | Descrizione |
---|---|
methodName | Nome del metodo. |
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. |
Per esempi completi, vedere la sezione di esempio.
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.
Nel file
requirements.text
aggiungere la riga seguente:azure-functions==1.18.0b3
Nel terminale installare la libreria Python.
pip install -r .\requirements.txt
Modificare il file
local.setting.json
con la configurazione seguente:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1