Dapr Invoke output binding for Azure Functions

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

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

مثال

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

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

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

[FunctionName("InvokeOutputBinding")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "invoke/{appId}/{methodName}")] HttpRequest req,
    [DaprInvoke(AppId = "{appId}", MethodName = "{methodName}", HttpVerb = "post")] IAsyncCollector<InvokeMethodParameters> output,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

    var outputContent = new InvokeMethodParameters
    {
        Body = requestBody
    };

    await output.AddAsync(outputContent);

    return new OkResult();
}

ينشئ المثال التالي دالة "InvokeOutputBinding" باستخدام DaprInvokeOutput الربط مع HttpTrigger:

@FunctionName("InvokeOutputBinding")
public String run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET, HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS,
            route = "invoke/{appId}/{methodName}")
            HttpRequestMessage<Optional<String>> request,
        @DaprInvokeOutput(
            appId = "{appId}", 
            methodName = "{methodName}", 
            httpVerb = "post")
        OutputBinding<String> payload,
        final ExecutionContext context)

في المثال التالي، يتم إقران ربط إخراج استدعاء Dapr بمشغل HTTP، والذي تم تسجيله بواسطة app الكائن:

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

app.generic('InvokeOutputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['POST'],
        route: "invoke/{appId}/{methodName}",
        name: "req"
    }),
    return: daprInvokeOutput,
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const payload = await request.text();
        context.log(JSON.stringify(payload));

        return { body: payload };
    }
});

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

فيما يلي ملف function.json ل daprInvoke:

{
  "bindings":
    {
      "type": "daprInvoke",
      "direction": "out",
      "appId": "{appId}",
      "methodName": "{methodName}",
      "httpVerb": "post",
      "name": "payload"
    }
}

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

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

using namespace System.Net

# Input bindings are passed in via param block.
param($req, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "Powershell InvokeOutputBinding processed a request."

$req_body = $req.Body

$invoke_output_binding_req_body = @{
    "body" = $req_body
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name payload -Value $invoke_output_binding_req_body

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

يوضح المثال التالي ربط إخراج Dapr Invoke، والذي يستخدم نموذج برمجة v2 Python. لاستخدامها daprInvoke في التعليمات البرمجية لتطبيق وظائف Python:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="InvokeOutputBinding")
@app.route(route="invoke/{appId}/{methodName}", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_invoke_output(arg_name = "payload", app_id = "{appId}", method_name = "{methodName}", http_verb = "post")
def main(req: func.HttpRequest, payload: func.Out[str] ) -> str:
    # request body must be passed this way "{\"body\":{\"value\":{\"key\":\"some value\"}}}" to use the InvokeOutputBinding, all the data must be enclosed in body property.
    logging.info('Python function processed a InvokeOutputBinding request from the Dapr Runtime.')

    body = req.get_body()
    logging.info(body)
    if body is not None:
        payload.set(body)
    else:
        logging.info('req body is none')
    return 'ok'

السمات

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

المعلمة ‏‏الوصف‬ يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
Appid معرف تطبيق Dapr المراد استدعاؤه. ✔️ ✔️
اسم الأسلوب اسم أسلوب التطبيق الذي يجب استدعاؤه. ✔️ ✔️
HttpVerb اختياري. فعل HTTP لاستخدام التطبيق لاستدعاء. القيمة الافتراضية هي POST. ✔️ ✔️
نص الرسالة مطلوب. نص الطلب. ✔️

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

DaprInvokeOutput يسمح لك التعليق التوضيحي باستدعاء دالتك والاستماع إلى ربط إخراج.

العنصر الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
Appid معرف التطبيق للتطبيق المتضمنة في ربط الاستدعاء. ✔️ ✔️
اسم الأسلوب اسم متغير الأسلوب. ✔️ ✔️
httpVerb النشر أو الحصول عليه. ✔️ ✔️
النص الأساسي مطلوب. نص الطلب. ✔️

التكوين

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

الخاصية ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
Appid معرف التطبيق للتطبيق المتضمنة في ربط الاستدعاء. ✔️ ✔️
الأساليب النشر أو الحصول عليه. ✔️ ✔️
النص الأساسي مطلوب. نص الطلب. ✔️

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

خاصية function.json ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
Appid معرف التطبيق للتطبيق المتضمنة في ربط الاستدعاء. ✔️ ✔️
اسم الأسلوب اسم متغير الأسلوب. ✔️ ✔️
httpVerb النشر أو الحصول عليه. ✔️ ✔️
النص الأساسي مطلوب. نص الطلب. ✔️

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

الخاصية ‏‏الوصف يمكن إرسالها عبر السمة يمكن إرسالها عبر RequestBody
app_id معرف التطبيق للتطبيق المتضمنة في ربط الاستدعاء. ✔️ ✔️
method_name اسم متغير الأسلوب. ✔️ ✔️
http_verb تعيين إلى post أو get. ✔️ ✔️
النص الأساسي مطلوب. نص الطلب. ✔️

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

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

الاستخدام

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

لاستخدام daprInvoke في 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.