Udostępnij za pośrednictwem


Powiązanie danych wyjściowych języka Dapr dla usługi Azure Functions

Powiązanie danych wyjściowych języka Dapr umożliwia wysyłanie wartości do powiązania wyjściowego języka Dapr podczas wykonywania funkcji.

Aby uzyskać informacje na temat konfiguracji i szczegółów konfiguracji rozszerzenia Języka Dapr, zobacz Omówienie rozszerzenia Języka Dapr.

Przykład

Funkcję języka C# można utworzyć przy użyciu jednego z następujących trybów języka C#:

Model wykonania opis
Model izolowanego procesu roboczego Kod funkcji jest uruchamiany w osobnym procesie roboczym platformy .NET. Używaj z obsługiwanymi wersjami platform .NET i .NET Framework. Aby dowiedzieć się więcej, zobacz Develop .NET isolated worker process functions (Tworzenie izolowanych funkcji procesów roboczych platformy .NET).
Model w procesie Kod funkcji jest uruchamiany w tym samym procesie co proces hosta usługi Functions. Obsługuje tylko wersje long term support (LTS) platformy .NET. Aby dowiedzieć się więcej, zobacz Tworzenie funkcji biblioteki klas platformy .NET.

W poniższym przykładzie pokazano użycie wyzwalacza wywołania usługi Dapr i powiązania danych wyjściowych języka Dapr w celu odczytu i przetwarzania żądania powiązania.

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

Poniższy przykład tworzy "SendMessageToKafka" funkcję przy użyciu DaprBindingOutput powiązania z elementem 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;
}

W poniższym przykładzie powiązanie danych wyjściowych języka Dapr jest sparowane z wyzwalaczem danych wyjściowych wywołania języka Dapr, który jest zarejestrowany przez app obiekt:

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

W poniższych przykładach pokazano wyzwalacze języka Dapr w pliku function.json i kodzie programu PowerShell, który używa tych powiązań.

Oto plik function.json dla elementu daprBinding:

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

Aby uzyskać więcej informacji na temat function.json właściwości pliku, zobacz sekcję Konfiguracja.

W kodzie:

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

W poniższym przykładzie przedstawiono powiązanie wyjściowe powiązania języka Dapr, które używa modelu programowania w języku Python w wersji 2. Aby użyć @dapp.dapr_binding_output w kodzie aplikacji funkcji języka 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'))

Atrybuty

W modelu przetwarzania użyj DaprBinding polecenia , aby zdefiniować powiązanie wyjściowe powiązania języka Dapr, które obsługuje następujące parametry:

Parametr Opis Można wysłać za pośrednictwem atrybutu Można wysłać za pośrednictwem elementu RequestBody
BindingName Nazwa powiązania języka Dapr. ✔️ ✔️
Operacja Skonfigurowana operacja powiązania. ✔️ ✔️
Metadane Przestrzeń nazw metadanych. ✔️
Data Wymagany. Dane operacji powiązania. ✔️

Adnotacje

Adnotacja DaprBindingOutput umożliwia utworzenie funkcji, która wysyła powiązanie wyjściowe.

Element opis Można wysłać za pośrednictwem atrybutu Można wysłać za pośrednictwem elementu RequestBody
bindingName Nazwa powiązania języka Dapr. ✔️ ✔️
wyjście Skonfigurowana operacja powiązania. ✔️ ✔️
metadane Przestrzeń nazw metadanych. ✔️
data Wymagany. Dane operacji powiązania. ✔️

Konfigurowanie

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w kodzie.

Właściwości opis Można wysłać za pośrednictwem atrybutu Można wysłać za pośrednictwem elementu RequestBody
bindingName Nazwa powiązania. ✔️ ✔️
rozdzielnicy Operacja powiązania. ✔️ ✔️
metadane Przestrzeń nazw metadanych. ✔️
data Wymagany. Dane operacji powiązania. ✔️

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json.

właściwość function.json opis Można wysłać za pośrednictwem atrybutu Można wysłać za pośrednictwem elementu RequestBody
bindingName Nazwa powiązania. ✔️ ✔️
rozdzielnicy Operacja powiązania. ✔️ ✔️
metadane Przestrzeń nazw metadanych. ✔️
data Wymagany. Dane operacji powiązania. ✔️

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione @dapp.dapr_binding_output w kodzie języka Python.

Właściwości opis Można wysłać za pośrednictwem atrybutu Można wysłać za pośrednictwem elementu RequestBody
binding_name Nazwa zdarzenia powiązania. ✔️ ✔️
rozdzielnicy Nazwa/identyfikator operacji powiązania. ✔️ ✔️
metadane Przestrzeń nazw metadanych. ✔️
data Wymagany. Dane operacji powiązania. ✔️

Jeśli właściwości są zdefiniowane zarówno w atrybutach, jak i RequestBody, priorytet jest przypisywany do danych podanych w pliku RequestBody.

Zobacz sekcję Przykład, aby zapoznać się z kompletnymi przykładami.

Użycie

Aby użyć powiązania danych wyjściowych języka Dapr, rozpocznij od skonfigurowania składnika powiązania danych wyjściowych języka Dapr. Więcej informacji na temat tego, który składnik ma być używany i jak go skonfigurować, znajdziesz w oficjalnej dokumentacji języka Dapr.

Aby użyć elementu daprBinding w języku Python w wersji 2, skonfiguruj projekt przy użyciu poprawnych zależności.

  1. Tworzenie i aktywowanie środowiska wirtualnego.

  2. requirements.text W pliku dodaj następujący wiersz:

    azure-functions==1.18.0b3
    
  3. W terminalu zainstaluj bibliotekę języka Python.

    pip install -r .\requirements.txt
    
  4. local.setting.json Zmodyfikuj plik przy użyciu następującej konfiguracji:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Następne kroki

Dowiedz się więcej o wywołaniu usługi Dapr.