Sdílet prostřednictvím


Volání výstupní vazby Dapr pro Azure Functions

Výstupní vazba volání Dapr umožňuje vyvolat jinou aplikaci Dapr během provádění funkce.

Informace o nastavení a konfiguraci rozšíření Dapr najdete v přehledu rozšíření Dapr.

Příklad

Funkci jazyka C# je možné vytvořit pomocí jednoho z následujících režimů jazyka C#:

Model spouštění Popis
Izolovaný model pracovního procesu Kód funkce se spouští v samostatném pracovním procesu .NET. Používá se s podporovanými verzemi rozhraní .NET a .NET Framework. Další informace najdete v tématu Vývoj funkcí izolovaného pracovního procesu .NET.
Model v procesu Kód funkce se spouští ve stejném procesu jako hostitelský proces služby Functions. Podporuje pouze verze dlouhodobé podpory (LTS) rozhraní .NET. Další informace najdete v tématu Vývoj funkcí knihovny tříd .NET.

Následující příklad ukazuje použití výstupní vazby dapr vyvolání služby Dapr k provedení operace vyvolání služby Dapr hostované v jiné aplikaci dapr-ized. V tomto příkladu funguje funkce jako 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();
}

Následující příklad vytvoří "InvokeOutputBinding" funkci pomocí vazby DaprInvokeOutput s 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)

V následujícím příkladu je výstupní vazba volání Dapr spárována s triggerem HTTP, který je registrován objektem app :

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

Následující příklady ukazují triggery Dapr v souboru function.json a kódu PowerShellu, který tyto vazby používá.

Tady je soubor function.json pro daprInvoke:

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

Další informace o function.json vlastnosti souboru naleznete v části Konfigurace .

V kódu:

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

Následující příklad ukazuje výstupní vazbu Dapr Invoke, která používá programovací model Pythonu v2. daprInvoke Použití v kódu aplikace funkcí Pythonu:

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'

Atributy

V modelu v procesu pomocí atributu DaprInvoke definujte výstupní vazbu dapr, která podporuje tyto parametry:

Parametr Popis Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
Appid ID aplikace Dapr, které se má vyvolat. ✔️ ✔️
Methodname Název metody aplikace, která se má vyvolat. ✔️ ✔️
HttpVerb Nepovinné. Příkaz HTTP, který se má použít k vyvolání aplikace. Výchozí hodnota je POST. ✔️ ✔️
Text Povinný: Text žádosti. ✔️

Poznámky

Poznámka DaprInvokeOutput umožňuje, aby funkce volala a naslouchala výstupní vazbě.

Element (Prvek) Popis Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
Appid ID aplikace zapojené do vazby vyvolání ✔️ ✔️
Methodname Název proměnné metody. ✔️ ✔️
httpVerb Post or get. ✔️ ✔️
tělo Povinný: Text žádosti. ✔️

Konfigurace

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v kódu.

Vlastnost Popis Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
Appid ID aplikace zapojené do vazby vyvolání ✔️ ✔️
Metody Post or get. ✔️ ✔️
tělo Povinný: Text žádosti. ✔️

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json.

vlastnost function.json Popis Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
Appid ID aplikace zapojené do vazby vyvolání ✔️ ✔️
Methodname Název proměnné metody. ✔️ ✔️
httpVerb Post or get. ✔️ ✔️
tělo Povinný: Text žádosti. ✔️

Následující tabulka vysvětluje vlastnosti konfigurace vazby, @dapp.dapr_invoke_output které jste nastavili v kódu Pythonu.

Vlastnost Popis Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
app_id ID aplikace zapojené do vazby vyvolání ✔️ ✔️
method_name Název proměnné metody. ✔️ ✔️
http_verb Nastavte na post nebo get. ✔️ ✔️
tělo Povinný: Text žádosti. ✔️

Pokud jsou vlastnosti definovány v atributech a RequestBody, priorita je udělena datům zadaným v RequestBody.

Kompletní příklady najdete v části Příklad.

Využití

Pokud chcete použít výstupní vazbu volání služby Dapr, přečtěte si další informace o používání volání služby Dapr v oficiální dokumentaci k Dapr.

Pokud chcete použít python daprInvoke v2, nastavte projekt se správnými závislostmi.

  1. Vytvoření a aktivace virtuálního prostředí

  2. requirements.text Do souboru přidejte následující řádek:

    azure-functions==1.18.0b3
    
  3. V terminálu nainstalujte knihovnu Pythonu.

    pip install -r .\requirements.txt
    
  4. Upravte local.setting.json soubor pomocí následující konfigurace:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Další kroky

Přečtěte si další informace o vyvolání služby Dapr.