Share via


Dapr State-invoerbinding voor Azure Functions

Met de Dapr-statusinvoerbinding kunt u de status Dapr lezen 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.

Opmerking

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

Uitvoeringsmodel Beschrijving
Geïsoleerde werkrolmodel Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Gebruiken met ondersteunde versies van .NET en .NET Framework. Zie .NET geïsoleerde werkprocesfuncties ontwikkelen voor meer informatie.
Model in proces Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt alleen LTS-versies (Long Term Support) van .NET. Zie .NET-klassebibliotheekfuncties ontwikkelen voor meer informatie.
[FunctionName("StateInputBinding")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "state/{key}")] HttpRequest req,
    [DaprState("statestore", Key = "{key}")] string state,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    return new OkObjectResult(state);
}

In het volgende voorbeeld wordt een "RetreveOrder" functie gemaakt met behulp van de DaprStateInput binding met de DaprServiceInvocationTrigger:

@FunctionName("RetrieveOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "RetrieveOrder") 
        String payload,
        @DaprStateInput(
            stateStore = "%StateStoreName%",
            key = "order")
        String product,
        final ExecutionContext context)

In het volgende voorbeeld wordt de Dapr-invoerbinding toegevoegd als een extraInput en gekoppeld aan een HTTP-trigger, die is geregistreerd door het app object:

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

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

        const daprStateInputValue = context.extraInputs.get(daprStateInput);
        // print the fetched state value
        context.log(daprStateInputValue);

        return daprStateInputValue;
    }
});

In de volgende voorbeelden ziet u Dapr-triggers in een function.json-bestand en PowerShell-code die gebruikmaakt van deze bindingen.

Dit is het function.json-bestand voor daprState:

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

Zie de sectie Configuratie voor meer informatie over function.json bestandseigenschappen.

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, $order
)

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

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

Write-Host "$jsonString"

In het volgende voorbeeld ziet u een Dapr State-invoerbinding, die gebruikmaakt van het v2 Python-programmeermodel. De binding naast de daprServiceInvocationTrigger code van uw Python-functie-app gebruikendaprState:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveOrder")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveOrder")
@app.dapr_state_input(arg_name="data", state_store="statestore", key="order")
def main(payload, data: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveOrder  --data '{}'
    logging.info('Python function processed a RetrieveOrder request from the Dapr Runtime.')
    logging.info(data)

Kenmerken

Gebruik in het procesmodel de DaprState dapr-status in uw functie, die ondersteuning biedt voor deze parameters:

Parameter Description
StateStore De naam van het statusarchief om de status op te halen.
Code De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.

Aantekeningen

Met de DaprStateInput aantekening kunt u de status Dapr in uw functie lezen.

Element Beschrijving
stateStore De naam van het dapr-statusarchief.
key De sleutelwaarde van het statusarchief.

Configuratie

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

Eigenschappen Beschrijving
stateStore De naam van het statusarchief.
key De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json-eigenschap Description
key De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.
stateStore De naam van het statusarchief.

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

Eigenschappen Beschrijving
state_store De naam van het statusarchief.
key De geheime sleutelwaarde. De naam van de sleutel die moet worden opgehaald uit het opgegeven statusarchief.

Zie de sectie Voorbeeld voor volledige voorbeelden.

Gebruik

Als u de Dapr-statusinvoerbinding 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
    

Volgende stappen

Meer informatie over Statusbeheer van Dapr.