Powiązanie danych wyjściowych języka Dapr State dla usługi Azure Functions
Powiązanie danych wyjściowych stanu dapr umożliwia zapisanie wartości w stanie 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 danych wyjściowych stanu dapr w celu utrwalania nowego stanu w magazynie stanów.
[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();
}
Poniższy przykład tworzy "CreateNewOrderHttpTrigger"
funkcję przy użyciu DaprStateOutput
powiązania z elementem 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.");
}
W poniższym przykładzie powiązanie danych wyjściowych stanu dapr jest sparowane z wyzwalaczem HTTP, który jest zarejestrowany przez app
obiekt:
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 };
}
});
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 danych daprState
wyjściowych:
{
"bindings":
{
"type": "daprState",
"stateStore": "%StateStoreName%",
"direction": "out",
"name": "order",
"key": "order"
}
}
Aby uzyskać więcej informacji na temat function.json właściwości pliku, zobacz sekcję Konfiguracja.
W kodzie:
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"]
W poniższym przykładzie przedstawiono powiązanie danych wyjściowych języka Dapr State, które używa modelu programowania w języku Python w wersji 2. Aby użyć daprState
w kodzie aplikacji funkcji języka Python:
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'
Atrybuty
W modelu przetwarzania użyj DaprState
polecenia , aby zdefiniować powiązanie wyjściowe stanu 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 |
---|---|---|---|
StateStore | Nazwa magazynu stanów do zapisania stanu. | ✔️ | ❌ |
Klawisz | Nazwa klucza do zapisania stanu w magazynie stanów. | ✔️ | ✔️ |
Wartość | Wymagany. Przechowywana wartość. | ❌ | ✔️ |
Adnotacje
Adnotacja DaprStateOutput
umożliwia działanie dostępu do magazynu stanów.
Element | opis | Można wysłać za pośrednictwem atrybutu | Można wysłać za pośrednictwem elementu RequestBody |
---|---|---|---|
stateStore | Nazwa magazynu stanów do zapisania stanu. | ✔️ | ❌ |
key | Nazwa klucza do zapisania stanu w magazynie stanów. | ✔️ | ✔️ |
wartość | Wymagany. Przechowywana wartość. | ❌ | ✔️ |
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 |
---|---|---|---|
stateStore | Nazwa magazynu stanów do zapisania stanu. | ✔️ | ❌ |
key | Nazwa klucza do zapisania stanu w magazynie stanów. | ✔️ | ✔️ |
wartość | Wymagany. Przechowywana wartość. | ❌ | ✔️ |
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 |
---|---|---|---|
stateStore | Nazwa magazynu stanów do zapisania stanu. | ✔️ | ❌ |
key | Nazwa klucza do zapisania stanu w magazynie stanów. | ✔️ | ✔️ |
wartość | Wymagany. Przechowywana wartość. | ❌ | ✔️ |
W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione @dapp.dapr_state_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 |
---|---|---|---|
stateStore | Nazwa magazynu stanów do zapisania stanu. | ✔️ | ❌ |
key | Nazwa klucza do zapisania stanu w magazynie stanów. | ✔️ | ✔️ |
wartość | Wymagany. Przechowywana wartość. | ❌ | ✔️ |
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 danych wyjściowych stanu dapr, rozpocznij od skonfigurowania składnika magazynu stanów Dapr. Więcej informacji na temat tego, który składnik ma być używany i jak go skonfigurować, znajdziesz w oficjalnej dokumentacji języka Dapr.
Aby użyć elementu daprState
w języku Python w wersji 2, skonfiguruj projekt przy użyciu poprawnych zależności.
Tworzenie i aktywowanie środowiska wirtualnego.
requirements.text
W pliku dodaj następujący wiersz:azure-functions==1.18.0b3
W terminalu zainstaluj bibliotekę języka Python.
pip install -r .\requirements.txt
local.setting.json
Zmodyfikuj plik przy użyciu następującej konfiguracji:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1