Azure İşlevleri için Dapr State çıkış bağlaması
Dapr durum çıkış bağlaması, işlev yürütme sırasında bir değeri Dapr durumuna kaydetmenizi sağlar.
Dapr uzantısının kurulum ve yapılandırma ayrıntıları hakkında bilgi için bkz. Dapr uzantısına genel bakış.
Örnek
C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:
Yürütme modeli | Açıklama |
---|---|
Yalıtılmış çalışan modeli | İşlev kodunuz ayrı bir .NET çalışan işleminde çalışır. Desteklenen .NET ve .NET Framework sürümleriyle kullanın. Daha fazla bilgi edinmek için bkz . .NET yalıtılmış çalışan işlemi işlevleri geliştirme. |
İşlem içi model | İşlev kodunuz İşlevler konak işlemiyle aynı işlemde çalışır. .NET'in yalnızca Uzun Süreli Destek (LTS) sürümlerini destekler. Daha fazla bilgi edinmek için bkz . .NET sınıf kitaplığı işlevleri geliştirme. |
Aşağıdaki örnekte, durum deposunda yeni bir durumu kalıcı hale getirmek için Dapr durum çıkış bağlamasının kullanılması gösterilmektedir.
[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();
}
Aşağıdaki örnek, ile bağlamasını DaprStateOutput
kullanarak bir "CreateNewOrderHttpTrigger"
HttpTrigger
işlev oluşturur:
@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.");
}
Aşağıdaki örnekte, Dapr durum çıkış bağlaması nesnesi tarafından kaydedilen bir HTTP tetikleyicisi app
ile eşleştirilir:
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 };
}
});
Aşağıdaki örneklerde, function.json dosyasındaki Dapr tetikleyicileri ve bu bağlamaları kullanan PowerShell kodu gösterilmektedir.
Çıktı için function.json dosyası daprState
aşağıdadır:
{
"bindings":
{
"type": "daprState",
"stateStore": "%StateStoreName%",
"direction": "out",
"name": "order",
"key": "order"
}
}
function.json dosya özellikleri hakkında daha fazla bilgi için Yapılandırma bölümüne bakın.
Kod:
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"]
Aşağıdaki örnekte, v2 Python programlama modelini kullanan bir Dapr State çıkış bağlaması gösterilmektedir. Python işlev uygulama kodunuzda kullanmak daprState
için:
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'
Özellikler
İşlem içi modelde, şu parametreleri destekleyen bir Dapr durum çıkış bağlaması tanımlamak için öğesini kullanınDaprState
:
Parametre | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
StateStore | Durum kaydedilecek durum deposunun adı. | ✔️ | ❌ |
Anahtar | Durum deposu içinde durumu kaydetmek için anahtarın adı. | ✔️ | ✔️ |
Value | Gerekli. Depolanmakta olan değer. | ❌ | ✔️ |
Ek Açıklamalar
Ek DaprStateOutput
açıklama, durum deposuna erişmenizi sağlar.
Öğe | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
stateStore | Durum kaydedilecek durum deposunun adı. | ✔️ | ❌ |
key | Durum deposu içinde durumu kaydetmek için anahtarın adı. | ✔️ | ✔️ |
value | Gerekli. Depolanmakta olan değer. | ❌ | ✔️ |
Yapılandırma
Aşağıdaki tabloda kodda ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
Özellik | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
stateStore | Durum kaydedilecek durum deposunun adı. | ✔️ | ❌ |
key | Durum deposu içinde durumu kaydetmek için anahtarın adı. | ✔️ | ✔️ |
value | Gerekli. Depolanmakta olan değer. | ❌ | ✔️ |
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
stateStore | Durum kaydedilecek durum deposunun adı. | ✔️ | ❌ |
key | Durum deposu içinde durumu kaydetmek için anahtarın adı. | ✔️ | ✔️ |
value | Gerekli. Depolanmakta olan değer. | ❌ | ✔️ |
Aşağıdaki tabloda Python kodunuzda ayarladığınız bağlama yapılandırma özellikleri @dapp.dapr_state_output
açıklanmaktadır.
Özellik | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
stateStore | Durum kaydedilecek durum deposunun adı. | ✔️ | ❌ |
key | Durum deposu içinde durumu kaydetmek için anahtarın adı. | ✔️ | ✔️ |
value | Gerekli. Depolanmakta olan değer. | ❌ | ✔️ |
Özellikler hem Özniteliklerde RequestBody
hem de içinde tanımlanmışsa, içinde sağlanan RequestBody
verilere öncelik verilir.
Tam örnekler için Örnek bölümüne bakın.
Kullanım
Dapr durum çıkış bağlamasını kullanmak için bir Dapr durum deposu bileşeni ayarlayarak başlayın. Resmi Dapr belgelerinde hangi bileşenin kullanılacağı ve nasıl ayarlanacağı hakkında daha fazla bilgi edinebilirsiniz.
python v2'de kullanmak daprState
için projenizi doğru bağımlılıklarla ayarlayın.
Sanal ortam oluşturma ve etkinleştirme.
Dosyanıza
requirements.text
aşağıdaki satırı ekleyin:azure-functions==1.18.0b3
Terminalde Python kitaplığını yükleyin.
pip install -r .\requirements.txt
Dosyanızı
local.setting.json
aşağıdaki yapılandırmayla değiştirin:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1