Share via


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

Importante

A Extensão Dapr para Azure Functions está atualmente em versão prévia e só tem suporte em ambientes de Aplicativos de Contêiner do Azure.

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.

Exemplo

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

Modelo de execução Descrição
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, confira Desenvolver funções de processo de trabalho isolado no .NET.
Modelo em processo 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 de biblioteca de classes do .NET.

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 Dapr é emparelhada com o gatilho de saída Dapr invoke, que é registrado pelo app objeto:

const { app, trigger } = require('@azure/functions');

app.generic('SendMessageToKafka', {
    trigger: trigger.generic({
        type: 'daprServiceInvocationTrigger',
        name: "payload"
    }),
    return: daprBindingOuput,
    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 };
    }
});

Os exemplos a seguir mostram gatilhos do Dapr em um arquivo function.json e o código do PowerShell que usa essas associações.

Aqui está o arquivo function.json para o daprBinding:

{
  "bindings": 
    {
      "type": "daprBinding",
      "direction": "out",
      "bindingName": "%KafkaBindingName%",
      "operation": "create",
      "name": "messages"
    }
}

Para obter mais informações sobre as propriedades do arquivo function.json, consulte a seção Configuração.

No código:

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'))

Atributos

No modelo em processo, use DaprBinding para definir uma associação de saída de Associação Dapr, que dê suporte a estes parâmetros:

Parâmetro Descrição Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
BindingName O nome da associação Dapr. ✔️ ✔️
Operação A operação de associação configurada. ✔️ ✔️
Metadados O namespace de metadados. ✔️
Dados Obrigatório. Os dados para a operação de associação. ✔️

Anotações

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

Elemento Descrição 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. ✔️ ✔️
metadados O namespace de metadados. ✔️
data Obrigatório. Os dados para a operação de associação. ✔️

Configuração

A tabela a seguir explica as propriedades de configuração de vinculação definidas no código.

Propriedade Descrição 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. ✔️ ✔️
metadados O namespace de metadados. ✔️
data Obrigatório. 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.

Propriedade function.json Descrição 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. ✔️ ✔️
metadados O namespace de metadados. ✔️
data Obrigatório. 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.

Propriedade Descrição 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. ✔️ ✔️
metadados O namespace de metadados. ✔️
data Obrigatório. 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.

Consulte a Seção de exemplo para obter exemplos completos.

Uso

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
    

Próximas etapas

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