Delen via


Dapr State-uitvoerbinding voor Azure Functions

Met de Dapr-statusuitvoerbinding kunt u een waarde opslaan in een Dapr-status tijdens het uitvoeren van een functie.

Zie het overzicht van de Dapr-extensie voor meer informatie over het instellen en configureren van de Dapr-extensie.

Example

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

Execution model Description
Geïsoleerd werknemermodel Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Gebruiken met ondersteunde versies van .NET en .NET Framework. Zie Handleiding voor het uitvoeren van C# Azure Functions in het geïsoleerde werkrolmodel voor meer informatie.
In-process model Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt alleen LTS-versies (Long Term Support) van .NET. Zie C#-klassebibliotheekfuncties ontwikkelen met behulp van Azure Functions voor meer informatie.

In het volgende voorbeeld ziet u hoe u de uitvoerbinding dapr-status gebruikt om een nieuwe status in het statusarchief te behouden.

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

In het volgende voorbeeld wordt een "CreateNewOrderHttpTrigger" functie gemaakt met behulp van de DaprStateOutput binding met een 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.");
}

In het volgende voorbeeld wordt de Uitvoerbinding dapr-status gekoppeld aan een HTTP-trigger, die is geregistreerd door het app object:

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"]

In het volgende voorbeeld ziet u een Dapr State-uitvoerbinding, die gebruikmaakt van het v2 Python-programmeermodel. Ga als volgt te werk om deze te gebruiken daprState in de code van uw Python-functie-app:

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 Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
StateStore De naam van het statusarchief om de status op te slaan. ✔️
Key De naam van de sleutel om de status op te slaan in het statusarchief. ✔️ ✔️
Value Required. De waarde die wordt opgeslagen. ✔️

Annotations

Met de DaprStateOutput aantekening kunt u toegang krijgen tot een statusarchief.

Element Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
stateStore De naam van het statusarchief om de status op te slaan. ✔️
key De naam van de sleutel om de status op te slaan in het statusarchief. ✔️ ✔️
value Required. De waarde die wordt opgeslagen. ✔️

Configuration

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in de code hebt ingesteld.

Property Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
stateStore De naam van het statusarchief om de status op te slaan. ✔️
key De naam van de sleutel om de status op te slaan in het statusarchief. ✔️ ✔️
value Required. De waarde die wordt opgeslagen. ✔️

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

function.json property Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
stateStore De naam van het statusarchief om de status op te slaan. ✔️
key De naam van de sleutel om de status op te slaan in het statusarchief. ✔️ ✔️
value Required. De waarde die wordt opgeslagen. ✔️

In de volgende tabel worden de bindingsconfiguratie-eigenschappen @dapp.dapr_state_output uitgelegd die u in uw Python-code hebt ingesteld.

Property Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
stateStore De naam van het statusarchief om de status op te slaan. ✔️
key De naam van de sleutel om de status op te slaan in het statusarchief. ✔️ ✔️
value Required. De waarde die wordt opgeslagen. ✔️

Als eigenschappen zijn gedefinieerd in zowel kenmerken als RequestBody, wordt prioriteit gegeven aan gegevens die zijn opgegeven in RequestBody.

See the Example section for complete examples.

Usage

Als u de Dapr-statusuitvoerbinding wilt gebruiken, begint u met het instellen van een Dapr-statusarchiefonderdeel. Meer informatie over welk onderdeel u moet gebruiken en hoe u dit kunt instellen in de officiële Dapr-documentatie.

Als u het daprState project in Python v2 wilt gebruiken, stelt u uw project in met de juiste afhankelijkheden.

  1. Een virtuele omgeving maken en activeren.

  2. Voeg in het requirements.text bestand de volgende regel toe:

    azure-functions==1.18.0b3
    
  3. Installeer de Python-bibliotheek in de terminal.

    pip install -r .\requirements.txt
    
  4. Wijzig uw local.setting.json bestand met de volgende configuratie:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Meer informatie over Statusbeheer van Dapr.