Partager via


Déclencheur d’appel de service Dapr pour Azure Functions

Azure Functions peut être déclenché sur un appel de service Dapr à l’aide des événements Dapr suivants.

Pour plus d’informations sur l’installation et la configuration de l’extension Dapr, consultez la vue d’ensemble de l’extension Dapr.

Example

Une fonction C# peut être créée à l’aide de l’un des modes C# suivants :

Execution model Description
Modèle de travailleur isolé Le code de votre fonction s’exécute dans un processus Worker .NET distinct. Utilisez avec les versions prises en charge de .NET et .NET Framework. Pour plus d’informations, consultez Guide d’exécution de C# Azure Functions dans le modèle worker isolé.
In-process model Le code de votre fonction s’exécute dans le même processus que le processus hôte Functions. Prend uniquement en charge les versions LTS (Long Term Support) de .NET. Pour en découvrir plus, consultez Développer des fonctions de bibliothèque de classes C# à l’aide d’Azure Functions.
[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"];
}

Voici le code Java du déclencheur d’appel du service Dapr :

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

Utilisez l’objet app pour inscrire les daprInvokeOutputpoints suivants :

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

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

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

For more information about function.json file properties, see the Configuration section.

In code:

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’exemple suivant montre un déclencheur d’appel de service Dapr, qui utilise le modèle de programmation Python v2. Pour utiliser le daprServiceInvocationTrigger code de votre application de fonction 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)

Attributes

In the in-process model, use the DaprServiceInvocationTrigger to trigger a Dapr service invocation binding, which supports the following properties.

Parameter Description
MethodName Optional. Nom de la méthode que l’appelant Dapr doit utiliser. S’il n’est pas spécifié, le nom de la fonction est utilisé comme nom de méthode.

Annotations

L’annotation DaprServiceInvocationTrigger vous permet de créer une fonction qui est appelée par le runtime Dapr.

Element Description
methodName Nom de la méthode.

Configuration

Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le code.

Property Description
type Cette propriété doit être définie sur daprServiceInvocationTrigger.
name Nom de la variable qui représente les données Dapr dans le code de fonction.

Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json.

function.json property Description
type Cette propriété doit être définie sur daprServiceInvocationTrigger.
name Nom de la variable qui représente les données Dapr dans le code de fonction.

Le tableau suivant explique les propriétés de configuration de liaison pour @dapp.dapr_service_invocation_trigger que vous définissez dans votre code Python.

Property Description
method_name Nom de la variable qui représente les données Dapr.

See the Example section for complete examples.

Usage

Pour utiliser un déclencheur d’appel de service Dapr, découvrez les composants à utiliser avec le déclencheur d’appel de service et comment les configurer dans la documentation officielle dapr.

Pour utiliser daprServiceInvocationTrigger dans Python v2, configurez votre projet avec les dépendances appropriées.

  1. Créer et activer un environnement virtuel.

  2. Dans votre fichier requirements.text, ajoutez la ligne suivante :

    azure-functions==1.18.0b3
    
  3. Dans le terminal, installez la bibliothèque Python.

    pip install -r .\requirements.txt
    
  4. Modifiez votre fichier local.setting.json avec la configuration suivante :

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

En savoir plus sur l’appel du service Dapr.