Sdílet prostřednictvím


Výstupní vazba stavu Dapr pro Azure Functions

Výstupní vazba stavu Dapr umožňuje uložit hodnotu do stavu Dapr během provádění funkce.

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

Example

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

Execution model Description
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 Příručce pro spouštění funkcí Azure Functions jazyka C# v izolovaném pracovním modelu.
In-process model 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 jazyka C# pomocí Azure Functions.

Následující příklad ukazuje použití výstupní vazby stavu Dapr k zachování nového stavu do úložiště stavů.

[FunctionName("StateOutputBinding")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "state/{key}")] HttpRequest req,
    [DaprState("statestore", Key = "{key}")] IAsyncCollector<string> state,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

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

    return new OkResult();
}

Následující příklad vytvoří "CreateNewOrderHttpTrigger" funkci pomocí vazby DaprStateOutput s HttpTrigger:

@FunctionName("CreateNewOrderHttpTrigger")
public String run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
        @DaprStateOutput(
            stateStore = "%StateStoreName%",
            key = "product")
        OutputBinding<String> product,
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger (CreateNewOrderHttpTrigger) processed a request.");
}

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

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

app.generic('StateOutputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['POST'],
        route: "state/{key}",
        name: "req"
    }),
    return: daprStateOutput,
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const payload = await request.text();
        context.log(JSON.stringify(payload));

        return { value : 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 daprState output:

{
  "bindings": 
    {
      "type": "daprState",
      "stateStore": "%StateStoreName%",
      "direction": "out",
      "name": "order",
      "key": "order"
    }
}

For more information about function.json file properties, see the Configuration section.

In code:

using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq

param (
    $payload
)

# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a CreateNewOrder request from the Dapr Runtime."

# Payload must be of the format { "data": { "value": "some value" } }

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $payload| ConvertTo-Json

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name order -Value $payload["data"]

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

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="HttpTriggerFunc")
@app.route(route="req", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_state_output(arg_name="state", state_store="statestore", key="newOrder")
def main(req: func.HttpRequest, state: func.Out[str] ) -> str:
    # request body must be passed this way '{\"value\": { \"key\": \"some value\" } }'
    body = req.get_body()
    if body is not None:
        state.set(body.decode('utf-8'))
        logging.info(body.decode('utf-8'))
    else:
        logging.info('req body is none')
    return 'ok'

Attributes

In the in-process model, use the DaprState to define a Dapr state output binding, which supports these parameters:

Parameter Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
StateStore Název úložiště stavů pro uložení stavu. ✔️
Key Název klíče pro uložení stavu v úložišti stavů. ✔️ ✔️
Value Required. Hodnota, která se ukládá. ✔️

Annotations

Poznámka DaprStateOutput umožňuje funkci přistupovat k úložišti stavů.

Element Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
stateStore Název úložiště stavů pro uložení stavu. ✔️
key Název klíče pro uložení stavu v úložišti stavů. ✔️ ✔️
value Required. Hodnota, která se ukládá. ✔️

Configuration

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

Property Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
stateStore Název úložiště stavů pro uložení stavu. ✔️
key Název klíče pro uložení stavu v úložišti stavů. ✔️ ✔️
value Required. Hodnota, která se ukládá. ✔️

The following table explains the binding configuration properties that you set in the function.json file.

function.json property Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
stateStore Název úložiště stavů pro uložení stavu. ✔️
key Název klíče pro uložení stavu v úložišti stavů. ✔️ ✔️
value Required. Hodnota, která se ukládá. ✔️

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

Property Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
stateStore Název úložiště stavů pro uložení stavu. ✔️
key Název klíče pro uložení stavu v úložišti stavů. ✔️ ✔️
value Required. Hodnota, která se ukládá. ✔️

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

See the Example section for complete examples.

Usage

Pokud chcete použít výstupní vazbu stavu Dapr, začněte nastavením komponenty úložiště stavů Dapr. Další informace o tom, kterou komponentu použít a jak ji nastavit, najdete v oficiální dokumentaci k Dapr.

Pokud chcete použít python daprState 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
    

Next steps

Přečtěte si další informace o správě stavu Dapr.