Udostępnij za pośrednictwem


Powiązanie danych wyjściowych dapr Invoke dla usługi Azure Functions

Powiązanie wyjściowe wywołania języka Dapr umożliwia wywoływanie innej aplikacji 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 powiązania wyjściowego wywołania języka Dapr w celu wykonania operacji wywołania usługi Dapr hostowanej w innej aplikacji dapr-ized. W tym przykładzie funkcja działa jak serwer proxy.

[FunctionName("InvokeOutputBinding")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "invoke/{appId}/{methodName}")] HttpRequest req,
    [DaprInvoke(AppId = "{appId}", MethodName = "{methodName}", HttpVerb = "post")] IAsyncCollector<InvokeMethodParameters> output,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

    var outputContent = new InvokeMethodParameters
    {
        Body = requestBody
    };

    await output.AddAsync(outputContent);

    return new OkResult();
}

Poniższy przykład tworzy "InvokeOutputBinding" funkcję przy użyciu DaprInvokeOutput powiązania z elementem HttpTrigger:

@FunctionName("InvokeOutputBinding")
public String run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET, HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS,
            route = "invoke/{appId}/{methodName}")
            HttpRequestMessage<Optional<String>> request,
        @DaprInvokeOutput(
            appId = "{appId}", 
            methodName = "{methodName}", 
            httpVerb = "post")
        OutputBinding<String> payload,
        final ExecutionContext context)

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

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

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

{
  "bindings":
    {
      "type": "daprInvoke",
      "direction": "out",
      "appId": "{appId}",
      "methodName": "{methodName}",
      "httpVerb": "post",
      "name": "payload"
    }
}

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 to the Azure Functions log stream.
Write-Host "Powershell InvokeOutputBinding processed a request."

$req_body = $req.Body

$invoke_output_binding_req_body = @{
    "body" = $req_body
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name payload -Value $invoke_output_binding_req_body

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

W poniższym przykładzie przedstawiono powiązanie wyjściowe Dapr Invoke, które używa modelu programowania w języku Python w wersji 2. Aby użyć daprInvoke w kodzie aplikacji funkcji języka Python:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="InvokeOutputBinding")
@app.route(route="invoke/{appId}/{methodName}", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_invoke_output(arg_name = "payload", app_id = "{appId}", method_name = "{methodName}", http_verb = "post")
def main(req: func.HttpRequest, payload: func.Out[str] ) -> str:
    # request body must be passed this way "{\"body\":{\"value\":{\"key\":\"some value\"}}}" to use the InvokeOutputBinding, all the data must be enclosed in body property.
    logging.info('Python function processed a InvokeOutputBinding request from the Dapr Runtime.')

    body = req.get_body()
    logging.info(body)
    if body is not None:
        payload.set(body)
    else:
        logging.info('req body is none')
    return 'ok'

Atrybuty

W modelu przetwarzania użyj atrybutu DaprInvoke , aby zdefiniować powiązanie wyjściowe wywołania 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
Appid Identyfikator aplikacji Dapr do wywołania. ✔️ ✔️
Methodname Nazwa metody aplikacji do wywołania. ✔️ ✔️
HttpVerb Opcjonalny. Czasownik HTTP do użycia aplikacji do wywoływania. Wartość domyślna to POST. ✔️ ✔️
Treść Wymagany. Treść żądania. ✔️

Adnotacje

Adnotacja DaprInvokeOutput umożliwia wywoływanie funkcji i nasłuchiwanie powiązania wyjściowego.

Element opis Można wysłać za pośrednictwem atrybutu Można wysłać za pośrednictwem elementu RequestBody
Appid Identyfikator aplikacji biorącej udział w powiązaniu wywołania. ✔️ ✔️
Methodname Nazwa zmiennej metody. ✔️ ✔️
httpVerb Opublikuj lub pobierz. ✔️ ✔️
treść Wymagany. Treść żądania. ✔️

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
Appid Identyfikator aplikacji biorącej udział w powiązaniu wywołania. ✔️ ✔️
Metody Opublikuj lub pobierz. ✔️ ✔️
treść Wymagany. Treść żądania. ✔️

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
Appid Identyfikator aplikacji biorącej udział w powiązaniu wywołania. ✔️ ✔️
Methodname Nazwa zmiennej metody. ✔️ ✔️
httpVerb Opublikuj lub pobierz. ✔️ ✔️
treść Wymagany. Treść żądania. ✔️

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione @dapp.dapr_invoke_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
app_id Identyfikator aplikacji biorącej udział w powiązaniu wywołania. ✔️ ✔️
method_name Nazwa zmiennej metody. ✔️ ✔️
http_verb Ustaw post lub get. ✔️ ✔️
treść Wymagany. Treść żądania. ✔️

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 wyjściowego wywołania usługi Dapr, dowiedz się więcej o sposobie używania wywołania usługi Dapr w oficjalnej dokumentacji języka Dapr.

Aby użyć elementu daprInvoke 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.