ربط إخراج حالة Dapr لوظائف Azure

يسمح لك ربط إخراج حالة Dapr بحفظ قيمة في حالة Dapr أثناء تنفيذ دالة.

للحصول على معلومات حول تفاصيل الإعداد والتكوين لملحق Dapr، راجع نظرة عامة على ملحق Dapr.

مثال

يمكن إنشاء وظيفة #C باستخدام أحد أوضاع C# التالية:

نموذج التنفيذ ‏‏الوصف
نموذج عامل معزول تعمل تعليمة دالتك البرمجية في عملية عامل .NET منفصلة. استخدم مع الإصدارات المدعومة من .NET و.NET Framework. لمعرفة المزيد، راجع تطوير وظائف معالجة العامل المعزولة .NET.
نموذج قيد المعالجة تعمل تعليمة دالتك البرمجية في نفس العملية مثل عملية مضيف الدالات. يدعم إصدارات الدعم طويل الأجل (LTS) فقط من .NET. لمعرفة المزيد، راجع تطوير وظائف مكتبة فئة .NET.

يوضح المثال التالي استخدام ربط إخراج حالة Dapr للاستمرار في حالة جديدة في مخزن الولاية.

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

ينشئ المثال التالي دالة "CreateNewOrderHttpTrigger" باستخدام DaprStateOutput الربط مع 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.");
}

في المثال التالي، يتم إقران ربط إخراج حالة Dapr بمشغل HTTP، والذي تم تسجيله بواسطة 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 };
    }
});

تظهر الأمثلة التالية مشغلات Dapr في ملف function.json ورمز PowerShell الذي يستخدم هذه الروابط.

فيما يلي ملف function.json للإخراج daprState :

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

لمزيد من المعلومات حول خصائص الملف function.json ، راجع قسم التكوين .

في التعليمات البرمجية:

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

يوضح المثال التالي ربط إخراج حالة Dapr، والذي يستخدم نموذج برمجة v2 Python. لاستخدامها daprState في التعليمات البرمجية لتطبيق وظائف 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'

السمات

في النموذج قيد المعالجة، استخدم DaprState لتعريف ربط إخراج حالة Dapr، والذي يدعم هذه المعلمات:

المعلمة ‏‏الوصف‬ يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
مخزن الولاية اسم مخزن الحالة لحفظ الحالة. ✔️
المفتاح اسم المفتاح لحفظ الحالة داخل مخزن الولاية. ✔️ ✔️
القيمة مطلوب. القيمة التي يتم تخزينها. ✔️

تعليقات توضيحية

DaprStateOutput يسمح لك التعليق التوضيحي بالوصول إلى مخزن الحالة.

العنصر الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
stateStore اسم مخزن الحالة لحفظ الحالة. ✔️
مفتاح اسم المفتاح لحفظ الحالة داخل مخزن الولاية. ✔️ ✔️
قيمة مطلوب. القيمة التي يتم تخزينها. ✔️

التكوين

يوضح الجدول التالي خصائص تكوين الربط التي قمت بتعيينها في التعليمات البرمجية.

الخاصية ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
stateStore اسم مخزن الحالة لحفظ الحالة. ✔️
مفتاح اسم المفتاح لحفظ الحالة داخل مخزن الولاية. ✔️ ✔️
قيمة مطلوب. القيمة التي يتم تخزينها. ✔️

يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.

خاصية function.json ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
stateStore اسم مخزن الحالة لحفظ الحالة. ✔️
مفتاح اسم المفتاح لحفظ الحالة داخل مخزن الولاية. ✔️ ✔️
قيمة مطلوب. القيمة التي يتم تخزينها. ✔️

يوضح الجدول التالي خصائص تكوين الربط التي @dapp.dapr_state_output قمت بتعيينها في التعليمات البرمجية ل Python.

الخاصية ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
stateStore اسم مخزن الحالة لحفظ الحالة. ✔️
مفتاح اسم المفتاح لحفظ الحالة داخل مخزن الولاية. ✔️ ✔️
قيمة مطلوب. القيمة التي يتم تخزينها. ✔️

إذا تم تعريف الخصائص في كل من السمات و RequestBody، يتم إعطاء الأولوية للبيانات المقدمة في RequestBody.

راجع قسم Example للحصول على أمثلة كاملة.

الاستخدام

لاستخدام ربط إخراج حالة Dapr، ابدأ بإعداد مكون مخزن حالة Dapr. يمكنك معرفة المزيد حول المكون الذي يجب استخدامه وكيفية إعداده في وثائق Dapr الرسمية.

لاستخدام daprState في Python v2، قم بإعداد مشروعك باستخدام التبعيات الصحيحة.

  1. إنشاء بيئة ظاهرية وتنشيطها.

  2. في الملف، requirements.text أضف السطر التالي:

    azure-functions==1.18.0b3
    
  3. في المحطة الطرفية، قم بتثبيت مكتبة Python.

    pip install -r .\requirements.txt
    
  4. قم بتعديل الملف الخاص بك local.setting.json بالتكوين التالي:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

الخطوات التالية

تعرف على المزيد حول إدارة حالة Dapr.