Compartilhar via


Associações de saída de Associação Dapr para o Azure Functions

A associação de saída do Dapr permite que você envie um valor para uma associação de saída Dapr durante uma execução de função.

Para obter mais informações sobre detalhes de instalação e configuração da extensão Dapr, consulte a Visão geral da extensão Dapr.

Example

A função C# pode ser criada usando um dos seguintes modos C#:

Execution model Description
Modelo de trabalho isolado O código de função é executado em um processo de trabalho do .NET separado. Use com versões com suporte do .NET e do .NET Framework. Para saber mais, consulte Guia para executar o C# Azure Functions no modelo de trabalho isolado.
In-process model Seu código de função é executado no mesmo processo que o processo de host do Functions. Dá suporte apenas a versões LTS (suporte de longo prazo) do .NET. Para saber mais, confira Desenvolver funções da biblioteca de classes C# usando o Azure Functions.

O seguinte exemplo demonstra o uso de um gatilho de invocação do serviço Dapr e uma associação de saída Dapr para ler e processar uma solicitação de associação.

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

O seguinte exemplo cria uma função "SendMessageToKafka" usando a associação DaprBindingOutput com 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;
}

No exemplo a seguir, a associação de saída do Dapr é emparelhada com o gatilho de saída de invocação do Dapr, que é registrado pelo objeto 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

O seguinte exemplo mostra uma associação de saída de Associação Dapr, que usa o Modelo de programação do Python v2. Para usar @dapp.dapr_binding_output em seu código do aplicativo de funções do 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 Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
BindingName O nome da associação Dapr. ✔️ ✔️
Operation A operação de associação configurada. ✔️ ✔️
Metadata O namespace de metadados. ✔️
Data Required. Os dados para a operação de associação. ✔️

Annotations

A anotação DaprBindingOutput permite que você crie uma função que envia uma associação de saída.

Element Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
bindingName O nome da associação Dapr. ✔️ ✔️
output A operação de associação configurada. ✔️ ✔️
metadata O namespace de metadados. ✔️
data Required. Os dados para a operação de associação. ✔️

Configuration

A tabela a seguir explica as propriedades de configuração de associação que você definiu no código.

Property Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
bindingName O nome da associação. ✔️ ✔️
operation A operação de associação. ✔️ ✔️
metadata O namespace de metadados. ✔️
data Required. Os dados para a operação de associação. ✔️

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json.

function.json property Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
bindingName O nome da associação. ✔️ ✔️
operation A operação de associação. ✔️ ✔️
metadata O namespace de metadados. ✔️
data Required. Os dados para a operação de associação. ✔️

A tabela a seguir explica as propriedades de configuração de associação para @dapp.dapr_binding_output definidas no código do Python.

Property Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
binding_name O nome do evento de associação. ✔️ ✔️
operation O nome/identificador da operação de associação. ✔️ ✔️
metadata O namespace de metadados. ✔️
data Required. Os dados para a operação de associação. ✔️

Se as propriedades forem definidas em Atributos e RequestBody, a prioridade será fornecida aos dados disponíveis em RequestBody.

See the Example section for complete examples.

Usage

Para usar a associação de saída do Dapr, comece configurando um componente de associação de saída Dapr. Saiba mais sobre qual componente usar e como configurá-lo na documentação oficial do Dapr.

Para usar a opção daprBinding no Python v2, configure seu projeto com as dependências corretas.

  1. Criar e ativar um ambiente virtual.

  2. No arquivo requirements.text, adicione a seguinte linha:

    azure-functions==1.18.0b3
    
  3. No terminal, instale a biblioteca do Python.

    pip install -r .\requirements.txt
    
  4. Modifique seu arquivo local.setting.json com a seguinte configuração:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Saiba mais sobre a invocação do serviço do Dapr.