Partager via


Liaison de sortie Dapr Binding pour Azure Functions

La liaison de sortie Dapr vous permet d’envoyer une valeur à une liaison de sortie Dapr pendant l’exécution d’une fonction.

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 worker 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.

L’exemple suivant illustre l’utilisation d’un déclencheur d’appel de service Dapr et d’une liaison de sortie Dapr pour lire et traiter une demande de liaison.

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

L’exemple suivant crée une fonction "SendMessageToKafka" à l’aide de la liaison DaprBindingOutput avec 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;
}

Dans l’exemple suivant, la liaison de sortie Dapr est associée au déclencheur de sortie d’appel Dapr, qui est inscrit par l’objet app :

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

L’exemple suivant montre une liaison de sortie Dapr Binding, qui utilise le modèle de programmation Python v2. Pour utiliser @dapp.dapr_binding_output dans le code de votre application de fonction 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'))

Attributes

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

Parameter Description Peut être envoyé via l’attribut Peut être envoyé via RequestBody
BindingName Nom de la liaison Dapr. ✔️ ✔️
Operation Opération de liaison configurée. ✔️ ✔️
Metadata Espace de noms de métadonnées. ✔️
Data Required. Données de l’opération de liaison. ✔️

Annotations

L’annotation DaprBindingOutput vous permet de créer une fonction qui envoie une liaison de sortie.

Element Description Peut être envoyé via l’attribut Peut être envoyé via RequestBody
bindingName Nom de la liaison Dapr. ✔️ ✔️
output Opération de liaison configurée. ✔️ ✔️
metadata Espace de noms de métadonnées. ✔️
data Required. Données de l’opération de liaison. ✔️

Configuration

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

Property Description Peut être envoyé via l’attribut Peut être envoyé via RequestBody
bindingName Le nom de la liaison. ✔️ ✔️
operation Opération de liaison. ✔️ ✔️
metadata Espace de noms de métadonnées. ✔️
data Required. Données de l’opération de liaison. ✔️

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 Peut être envoyé via l’attribut Peut être envoyé via RequestBody
bindingName Le nom de la liaison. ✔️ ✔️
operation Opération de liaison. ✔️ ✔️
metadata Espace de noms de métadonnées. ✔️
data Required. Données de l’opération de liaison. ✔️

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

Property Description Peut être envoyé via l’attribut Peut être envoyé via RequestBody
binding_name Nom de l’événement de liaison. ✔️ ✔️
operation Nom/identificateur de l’opération de liaison. ✔️ ✔️
metadata Espace de noms de métadonnées. ✔️
data Required. Données de l’opération de liaison. ✔️

Si les propriétés sont définies dans les attributs et RequestBody, la priorité est attribuée aux données fournies dans RequestBody.

See the Example section for complete examples.

Usage

Pour utiliser la liaison de sortie Dapr, commencez par configurer un composant de liaison de sortie Dapr. Vous pouvez en savoir plus sur le composant à utiliser et sur la façon de le configurer dans la documentation officielle Dapr.

Pour utiliser daprBinding 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.