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، قم بإعداد مشروعك باستخدام التبعيات الصحيحة.
إنشاء بيئة ظاهرية وتنشيطها.
في الملف،
requirements.text
أضف السطر التالي:azure-functions==1.18.0b3
في المحطة الطرفية، قم بتثبيت مكتبة Python.
pip install -r .\requirements.txt
قم بتعديل الملف الخاص بك
local.setting.json
بالتكوين التالي:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1