ربط مُخرج مراكز الأحداث Azure لوظائف Azure

توضح هذه المقالة كيفية العمل مع روابط مراكز الأحداث في Azure لوظائف Azure. تدعم Azure Functions روابط المشغل والمخرجات لمراكز الأحداث.

للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع الاستعراض العام.

استخدم ربط مخرجات مراكز الأحداث لكتابة الأحداث إلى تدفق حدث. يجب عليك إرسال تصريح إلى محاور الأحداث لكتابة الأحداث إليه.

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

هام

تستخدم هذه المقالة علامات التبويب لدعم إصدارات متعددة من نموذج البرمجة Node.js. يتوفر نموذج v4 بشكل عام وتم تصميمه للحصول على تجربة أكثر مرونة وبديهية لمطوري JavaScript وTypeScript. لمزيد من التفاصيل حول كيفية عمل نموذج v4، راجع دليل مطور Azure Functions Node.js. لمعرفة المزيد حول الاختلافات بين v3 وv4، راجع دليل الترحيل.

تدعم Azure Functions نموذجي برمجة ل Python. تعتمد الطريقة التي تحدد بها روابطك على نموذج البرمجة الذي اخترته.

يتيح لك نموذج برمجة Python v2 تحديد الروابط باستخدام المحسنات مباشرة في التعليمات البرمجية لدالة Python. لمزيد من المعلومات، راجع دليل مطور Python.

تدعم هذه المقالة كلا نموذجي البرمجة.

مثال

يُظهر المثال التالي دالة C#‎ تكتب سلسلة رسالة إلى مركز الحدث، باستخدام قيمة إرجاع الطريقة كإخراج:

[Function(nameof(EventHubFunction))]
[FixedDelayRetry(5, "00:00:10")]
[EventHubOutput("dest", Connection = "EventHubConnection")]
public string EventHubFunction(
    [EventHubTrigger("src", Connection = "EventHubConnection")] string[] input,
    FunctionContext context)
{
    _logger.LogInformation("First Event Hubs triggered message: {msg}", input[0]);

    var message = $"Output message created at {DateTime.Now}";
    return message;
}

يوضح المثال التالي دالة TypeScript التي تم تشغيلها من خلال المؤقت والتي ترسل رسالة واحدة إلى مركز أحداث:

import { app, InvocationContext, output, Timer } from '@azure/functions';

export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<string> {
    const timeStamp = new Date().toISOString();
    return `Message created at: ${timeStamp}`;
}

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: output.eventHub({
        eventHubName: 'myeventhub',
        connection: 'MyEventHubSendAppSetting',
    }),
    handler: timerTrigger1,
});

لإخراج رسائل متعددة، قم بإعادة صفيف بدلا من كائن واحد. على سبيل المثال:

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

يوضح المثال التالي دالة JavaScript التي تم تشغيلها من قبل مؤقت ترسل رسالة واحدة إلى مركز أحداث:

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

const eventHubOutput = output.eventHub({
    eventHubName: 'myeventhub',
    connection: 'MyEventHubSendAppSetting',
});

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: eventHubOutput,
    handler: (myTimer, context) => {
        const timeStamp = new Date().toISOString();
        return `Message created at: ${timeStamp}`;
    },
});

لإخراج رسائل متعددة، قم بإعادة صفيف بدلا من كائن واحد. على سبيل المثال:

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

أمثلة PowerShell الكاملة معلقة.

يوضح المثال التالي ربط مشغل مركز الأحداث ودالة Python التي تستخدم الربط. تقوم الوظيفة بكتابة رسالة إلى مركز الحدث. يعتمد المثال على ما إذا كنت تستخدم نموذج برمجة v1 أو v2 Python.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
                      event_hub_name="<EVENT_HUB_NAME>",
                      connection="<CONNECTION_SETTING>")
def eventhub_output(req: func.HttpRequest, event: func.Out[str]):
    body = req.get_body()
    if body is not None:
        event.set(body.decode('utf-8'))
    else:    
        logging.info('req body is none')
    return 'ok'

إليك تعليمة Python البرمجية التي ترسل رسائل متعددة:

import logging
import azure.functions as func
from typing import List

app = func.FunctionApp()

@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
                      event_hub_name="<EVENT_HUB_NAME>",
                      connection="<CONNECTION_SETTING>")

def eventhub_output(req: func.HttpRequest, event: func.Out[List[str]]) -> func.HttpResponse:
    my_messages=["message1", "message2","message3"]
    event.set(my_messages)
    return func.HttpResponse(f"Messages sent")

يوضح المثال التالي دالة Java التي تكتب رسالة تحتوي على الوقت الحالي إلى مركز أحداث.

@FunctionName("sendTime")
@EventHubOutput(name = "event", eventHubName = "samples-workitems", connection = "AzureEventHubConnection")
public String sendTime(
   @TimerTrigger(name = "sendTimeTrigger", schedule = "0 */5 * * * *") String timerInfo)  {
     return LocalDateTime.now().toString();
 }

في مكتبة وقت تشغيل وظائف Java، استخدم التعليق التوضيحي @EventHubOutput على المعلمات التي سيتم نشر قيمتها إلى مراكز الأحداث. يجب أن تكون المعلمة من النوع OutputBinding<T>، حيث T هي POJO أو أي نوع Java أصلي.

السمات

تستخدم كل من مكتبات المعالجة والعامل المعزول C# السمة لتكوين الربط. يستخدم البرنامج النصي C# بدلا من ذلك ملف تكوين function.json كما هو موضح في دليل البرمجة النصية C#‎.

استخدم [EventHubOutputAttribute] لتعريف ارتباط الإخراج بمركز الحدث، والذي يدعم الخصائص التالية.

المعلمات ‏‏الوصف
EventHubName اسم مركز الأحداث. عندما يكون اسم مركز الأحداث موجودًا أيضًا في سلسلة الاتصال، هذه القيمة تتجاوز هذه الخاصية في وقت التشغيل.
Connection اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد طريقة الاتصال بمراكز الأحداث. لمعرفة المزيد، راجع الاتصالات.

الديكور

ينطبق فقط على نموذج برمجة Python v2.

بالنسبة لوظائف Python v2 المعرفة باستخدام مصمم الديكور، يتم دعم هذه الخصائص ل event_hub_output:

الخاصية ‏‏الوصف
arg_name اسم المتغير المستخدم في التعليمات البرمجية للدالة التي تمثل الحدث.
event_hub_name اسم مركز الأحداث. عندما يكون اسم مركز الأحداث موجودًا أيضًا في سلسلة الاتصال، هذه القيمة تتجاوز هذه الخاصية في وقت التشغيل.
connection اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد طريقة الاتصال بمراكز الأحداث. لمعرفة المزيد، راجع الاتصالات.

للحصول على وظائف Python المعرفة باستخدام function.json، راجع قسم التكوين.

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

في مكتبة وقت تشغيل وظائف Java، استخدم التعليق التوضيحي EventHubOutput على المعلمات التي سيتم نشر قيمتها في مراكز الأحداث. الإعدادات التالية مدعومة في التعليق التوضيحي:

التكوين

ينطبق فقط على نموذج برمجة Python v1.

يوضح الجدول التالي الخصائص التي يمكنك تعيينها على الكائن الذي options تم تمريره output.eventHub() إلى الأسلوب .

الخاصية ‏‏الوصف
eventHubName اسم مركز الأحداث. عندما يكون اسم مركز الأحداث موجودًا أيضًا في سلسلة الاتصال، هذه القيمة تتجاوز هذه الخاصية في وقت التشغيل.
الاتصال اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد طريقة الاتصال بمراكز الأحداث. لمعرفة المزيد، راجع الاتصالات.

يوضح الجدول التالي خصائص تكوين الربط التي قمت بتعيينها في ملف function.json، والذي يختلف باختلاف إصدار وقت التشغيل.

خاصية function.json ‏‏الوصف
النوع يجب تعيينه إلى eventHub.
الاتجاه يجب تعيينه إلى out. يتم تعيين هذه المعلمة تلقائيًا عند إنشاء الربط في مدخل Azure.
الاسم اسم المتغير المستخدم في التعليمات البرمجية للدالة التي تمثل الحدث.
eventHubName الدالات 2.x وأعلى. اسم مركز الأحداث. عندما يكون اسم مركز الأحداث موجودًا أيضًا في سلسلة الاتصال، هذه القيمة تتجاوز هذه الخاصية في وقت التشغيل.
الاتصال اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد طريقة الاتصال بمراكز الأحداث. لمعرفة المزيد، راجع الاتصالات.

عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.

الاستخدام

يعتمد نوع المعلمة الذي يدعمه ربط مخرجات مراكز الأحداث على إصدار وقت تشغيل الدوال وإصدار حزمة الامتداد ونمط C# المستخدم.

عندما تريد أن تكتب الدالة حدثا واحدا، يمكن ربط إخراج مراكز الأحداث بالأنواع التالية:

النوع ‏‏الوصف
string الحدث كسلسلة. استخدم عندما يكون الحدث نصا بسيطا.
byte[] وحدات بايت الحدث.
‏‏أنواع قابلة للتسلسل إلى JSON كائن يمثل الحدث. تحاول الدالات تسلسل نوع كائن CLR (POCO) قديم عادي في بيانات JSON.

عندما تريد أن تكتب الدالة أحداثا متعددة، يمكن ربط إخراج مراكز الأحداث بالأنواع التالية:

النوع ‏‏الوصف
T[] حيث T هو أحد أنواع الأحداث الفردية صفيف يحتوي على أحداث متعددة. يمثل كل إدخال حدثا واحدا.

بالنسبة لسيناريوهات الإخراج الأخرى، قم بإنشاء واستخدام أنواع من Microsoft.Azure.EventHubs مباشرة.

هناك خياران لإخراج رسالة مراكز الأحداث من دالة باستخدام التعليق التوضيحي EventHubOutput :

  • القيمة المرجعة: من خلال تطبيق التعليق التوضيحي على الدالة نفسها، تستمر القيمة المرجعة للدالة كرسالة Event Hubs.

  • أمر حتمي: لتعيين قيمة الرسالة صراحةً، بادر بتطبيق التعليق التوضيحي على معلمة معينة من النوع OutputBinding<T>، حيث T عبارة عن POJO أو أي نوع Java أصلي. باستخدام هذا التكوين، يستمر تمرير قيمة إلى setValue الأسلوب في استمرار القيمة كرسالة Event Hubs.

أمثلة PowerShell الكاملة معلقة.

الوصول إلى رسالة الإخراج عن طريق إرجاع القيمة مباشرة أو باستخدام context.extraOutputs.set().

هناك خياران لإخراج رسالة "مراكز الأحداث" من دالة:

  • القيمة المرجعة: تعيين الخاصية name في function.json إلى $return. باستخدام هذا التكوين، تستمر القيمة المرجعة للدالة كرسالة Event Hubs.

  • أمر حتمي: تمرير قيمة إلى الأسلوب المُحدد الخاص بالمعلمة التي أُعلن عنها باعتبارها نوع Out. تستمر القيمة التي تم تمريرها إلى set كرسالة Event Hubs.

الاتصالات

تُعد الخاصية connection مرجعًا لتكوين البيئة التي تحدد كيفية اتصال التطبيق بمراكز الأحداث. ويجوز لها أن تحدد ما يلي:

إذا كانت القيمة المكونة مطابقة بدقة لإعداد واحد ومطابقة لبادئة للإعدادات الأخرى، يتم استخدام المطابقة الدقيقة.

سلسلة الاتصال

احصل على سلسلة الاتصال هذه بالنقر فوق الزر Connection Informationلمساحة الاسم، وليس مركز الحدث نفسه. يجب أن تكون سلسلة الاتصال لمساحة "مراكز الأحداث"، وليس مركز الحدث نفسها.

عند استخدام المشغلات، يجب أن يكون لسلسلة الاتصال أذونات "قراءة" على الأقل لتنشيط الوظيفة. عند استخدامها لربط الإخراج، يجب أن يكون لسلسلة الاتصال أذونات "إرسال" لإرسال الرسائل إلى دفق الحدث.

يجب تخزين سلسلة الاتصال هذه في إعداد تطبيق باسم يطابق القيمة المحددة بواسطة خاصية connection لتكوين الربط.

الاتصالات القائمة على الهوية

إذا كنت تستخدم الإصدار 5.x أو أعلى من الملحق، فبدلا من استخدام سلسلة الاتصال مع سر، يمكنك أن يكون التطبيق يستخدم هوية Microsoft Entra. للقيام بذلك، يمكنك تحديد الإعدادات تحت بادئة مشتركة والتي تقوم بالتعيين إلى خاصية connection في تكوين المشغل والربط.

في هذا الوضع، يتطلب الملحق الخصائص التالية:

الخاصية قالب متغير البيئة ‏‏الوصف مثال للقيمة
مساحة اسم مؤهلة بالكامل <CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace مساحة اسم مراكز الأحداث المؤهلة بالكامل. myeventhubns.servicebus.windows.net

قد يتم تعيين خصائص إضافية لتخصيص الاتصال. راجع الخصائص الشائعة للاتصالات المعتمدة على الهوية.

إشعار

عند استخدام Azure App Configuration أو Key Vault لتوفير إعدادات لاتصالات الهوية المُدارة، يجب أن تستخدم أسماء الإعداد فاصل مفاتيح صالح مثل : أو / بدلاً من __ لضمان حل الأسماء بشكل صحيح.

على سبيل المثال، <CONNECTION_NAME_PREFIX>:fullyQualifiedNamespace

عند استضافتها في خدمة Azure Functions، تستخدم الاتصالات المستندة إلى الهوية هوية مدارة. تستخدم الهوية المعينة من قبل النظام بشكل افتراضي على الرغم من إمكانية تحديد هوية معينة من قبل المستخدم مع خصائص credential و clientID. لاحظ أن تكوين هوية معينة من المستخدم باستخدام معرف مورد غير معتمد. عند التشغيل في سياقات أخرى، مثل التنمية المحلية، يتم استخدام هوية المطور الخاصة بك بدلًا من ذلك، على الرغم من أنه يمكن تخصيصها. راجع التطوير المحلي من خلال الاتصالات القائمة على الهوية.

منح الإذن للهوية

مهما كانت الهوية المستخدمة يجب أن يكون لديك أذونات لتنفيذ الإجراءات المقصودة. بالنسبة لمعظم خدمات Azure، يعني هذا أنك بحاجة إلى تعيين دور في Azure RBAC، باستخدام أدوار مضمنة أو مخصصة توفر هذه الأذونات.

هام

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

ستحتاج إلى إنشاء تعيين دور يوفر الوصول إلى مركز الأحداث الخاص بك في وقت التشغيل. يمكن أن يكون نطاق تعيين الدور لمساحة اسم مراكز الأحداث أو مركز الأحداث نفسه. إن أدوار الإدارة، مثل Owner، غير كافية. يوضح الجدول التالي الأدوار المدمجة الموصى بها عند استخدام امتداد مراكز الأحداث في التشغيل العادي. قد يتطلب طلبك أذونات إضافية بناءً على الرمز الذي تكتبه.

نوع الربط مثال على الأدوار المضمنة
المشغِّل Azure Event Hubs Data Receiver، مالك بيانات مراكز الأحداث Azure
ربط بيانات الإخراج مرسل بيانات مراكز أحداث Azure Event Hubs

الاستثناءات والتعليمات البرمجية للإرجاع

Binding المرجع
مراكز الأحداث دليل العمليات

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