مشغّل Azure Event Grid من أجل Azure Functions

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

إشعار

لا يتم دعم مشغلات Event Grid في الأصل في بيئة خدمة التطبيق لموازنة التحميل الداخلي (ASE). يستخدم المشغل طلب HTTP الذي لا يمكنه الوصول إلى تطبيق الدالة بدون بوابة إلى الشبكة الظاهرية.

هام

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

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

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

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

مثال

للحصول على مثال لمشغل HTTP، راجع تلقي الأحداث إلى نقطة نهاية HTTP.

يعتمد نوع معلمة الإدخال المستخدمة مع مشغل Event Grid على هذه العوامل الثلاثة:

  • إصدار وقت تشغيل الوظائف
  • إصدار الملحق الدائم
  • طريقة الوظيفة C#‎.

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

  • نموذج العامل المعزول: دالة C# المترجمة التي يتم تشغيلها في عملية عامل معزولة عن وقت التشغيل. عملية العامل المعزولة مطلوبة لدعم وظائف C# التي تعمل على إصدارات LTS وغير LTS .NET و.NET Framework. تستخدم Microsoft.Azure.Functions.Worker.Extensions.* ملحقات دالات عملية العامل المعزولة مساحات الأسماء.
  • نموذج قيد المعالجة: دالة C# المحولة برمجيا التي تعمل في نفس العملية مثل وقت تشغيل الوظائف. في تباين هذا النموذج، يمكن تشغيل الدالات باستخدام البرمجة النصية C#، والتي يتم دعمها بشكل أساسي لتحرير مدخل C#. تستخدم Microsoft.Azure.WebJobs.Extensions.* ملحقات الوظائف قيد المعالجة مساحات الأسماء.

هام

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

عند تشغيل دالة C# في عملية عامل معزولة، تحتاج إلى تعريف نوع مخصص لخصائص الحدث. يحدد المثال التالي فئة MyEventType.

    public class MyEventType
    {
        public string Id { get; set; }

        public string Topic { get; set; }

        public string Subject { get; set; }

        public string EventType { get; set; }

        public DateTime EventTime { get; set; }

        public IDictionary<string, object> Data { get; set; }
    }
}

يوضح المثال التالي كيفية استخدام النوع المخصص في كل من المشغل وربط إخراج شبكة الأحداث:

public static class EventGridFunction
{
    [Function(nameof(EventGridFunction))]
    [EventGridOutput(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
    public static MyEventType Run([EventGridTrigger] MyEventType input, FunctionContext context)
    {
        var logger = context.GetLogger(nameof(EventGridFunction));

        logger.LogInformation(input.Data.ToString());

        var outputEvent = new MyEventType()
        {
            Id = "unique-id",
            Subject = "abc-subject",
            Data = new Dictionary<string, object>
            {
                { "myKey", "myValue" }
            }
        };

        return outputEvent;
    }
}

يحتوي هذا القسم على الأمثلة التالية:

تُظهر الأمثلة التالية ربط المشغل في Java الذي يستخدم الربط وينشئ حدثًا، أولًا يتلقى الحدث كـ String والثاني كـ POJO.

مشغل Event Grid، ومعلمة سلسلة

  @FunctionName("eventGridMonitorString")
  public void logEvent(
    @EventGridTrigger(
      name = "event"
    )
    String content,
    final ExecutionContext context) {
      context.getLogger().info("Event content: " + content);
  }

مشغل Event Grid، ومعلمة POJO

يستخدم هذا المثال POJO التالي، ويمثل خصائص المستوى الأعلى لحدث Event Grid:

import java.util.Date;
import java.util.Map;

public class EventSchema {

  public String topic;
  public String subject;
  public String eventType;
  public Date eventTime;
  public String id;
  public String dataVersion;
  public String metadataVersion;
  public Map<String, Object> data;

}

عند الوصول، يتم إلغاء تسلسل بيانات JSON الأساسية للحدث إلى EventSchema POJO لاستخدامها من قِبل الدالة. تسمح هذه العملية للدالة بالوصول إلى خصائص الحدث بطريقة موجهة للعنصر.

  @FunctionName("eventGridMonitor")
  public void logEvent(
    @EventGridTrigger(
      name = "event"
    )
    EventSchema event,
    final ExecutionContext context) {
      context.getLogger().info("Event content: ");
      context.getLogger().info("Subject: " + event.subject);
      context.getLogger().info("Time: " + event.eventTime); // automatically converted to Date by the runtime
      context.getLogger().info("Id: " + event.id);
      context.getLogger().info("Data: " + event.data);
  }

من مكتبة وقت تشغيل دوال Java، استخدم EventGridTrigger التعليق التوضيحي على المعلمات التي تأتي قيمتها من Event Grid. تؤدي المعلمات مع هذه التعليقات التوضيحية إلى تشغيل الدالة عند وصول حدث. يمكن استخدام هذا التعليق التوضيحي مع أنواع Java الأصلية أو POJOs أو القيم االخالية Optional<T>.

يوضح المثال التالي دالة TypeScript لمشغل شبكة الأحداث.

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

export async function eventGridTrigger1(event: EventGridEvent, context: InvocationContext): Promise<void> {
    context.log('Event grid function processed event:', event);
}

app.eventGrid('eventGridTrigger1', {
    handler: eventGridTrigger1,
});

يوضح المثال التالي دالة JavaScript لمشغل شبكة الأحداث.

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

app.eventGrid('eventGridTrigger1', {
    handler: (event, context) => {
        context.log('Event grid function processed event:', event);
    },
});

يوضح المثال التالي كيفية تكوين ربط مشغل Event Grid في ملف function.json.

{
  "bindings": [
    {
      "type": "eventGridTrigger",
      "name": "eventGridEvent",
      "direction": "in"
    }
  ]
}

يتم توفير حدث Event Grid للدالة عبر معلمة اسمها eventGridEvent كما هو موضح في مثال PowerShell التالي.

param($eventGridEvent, $TriggerMetadata)

# Make sure to pass hashtables to Out-String so they're logged correctly
$eventGridEvent | Out-String | Write-Host

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

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="eventGridTrigger")
@app.event_grid_trigger(arg_name="event")
def eventGridTest(event: func.EventGridEvent):
    result = json.dumps({
        'id': event.id,
        'data': event.get_json(),
        'topic': event.topic,
        'subject': event.subject,
        'event_type': event.event_type,
    })

    logging.info('Python EventGrid trigger processed an event: %s', result)

السمات

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

فيما يلي سمة EventGridTrigger في توقيع أسلوب:

[Function(nameof(EventGridFunction))]
[EventGridOutput(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
public static MyEventType Run([EventGridTrigger] MyEventType input, FunctionContext context)
{

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

يتيح لك تعليق EventGridTrigger التوضيحي تكوين ربط Event Grid بشكل تعريفي عن طريق تقديم قيم التكوين. راجع أقسام المثال والتكوين لمزيدٍ من التفاصيل.

التكوين

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

التكوين

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

خاصية function.json ‏‏الوصف
النوع مطلوب - يجب تعيينه إلى eventGridTrigger.
الاتجاه مطلوب - يجب تعيينه إلى in.
الاسم مطلوب - اسم المتغير المستخدم في التعليمة البرمجية للدالة للمعلمة التي تتلقى بيانات الحدث.

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

الاستخدام

يستخدم مشغل Event Grid طلب HTTP للإخطار على الويب، والذي يمكن تكوينه باستخدام نفس إعدادات host.json مثل مشغل HTTP.

يعتمد نوع المعلمة الذي يدعمه مشغل Event Grid على إصدار وقت تشغيل الوظائف وإصدار حزمة الملحق وطريقة C# المستخدمة.

عندما تريد أن تعالج الدالة حدثا واحدا، يمكن ربط مشغل Event Grid بالأنواع التالية:

النوع ‏‏الوصف
‏‏أنواع قابلة للتسلسل إلى JSON تحاول الدالات إلغاء تسلسل بيانات JSON للحدث إلى نوع كائن CLR قديم عادي (POCO).
string الحدث كسلسلة.
BinaryData1 وحدات البايت لرسالة الحدث.
CloudEvent1 كائن الحدث. استخدم عند تكوين Event Grid للتسليم باستخدام مخطط CloudEvents.
EventGridEvent1 كائن الحدث. استخدم عند تكوين Event Grid للتسليم باستخدام مخطط Event Grid.

عندما تريد أن تعالج الدالة دفعة من الأحداث، يمكن ربط مشغل Event Grid بالأنواع التالية:

النوع ‏‏الوصف
CloudEvent[]1،
EventGridEvent[]1،
string[],
BinaryData[]1
صفيف من الأحداث من الدفعة. يمثل كل إدخال حدثا واحدا.

1 لاستخدام هذه الأنواع، تحتاج إلى الرجوع إلى Microsoft.Azure.Functions.Worker.Extensions.EventGrid 3.3.0 أو أحدث والتبعيات الشائعة لروابط نوع SDK.

يتوفر مثيل حدث Event Grid عبر المعلمة المقترنة بالسمة EventGridTrigger المكتوبة في شكل EventSchema.

يتوفر مثيل Event Grid عبر المعلمة المكونة في خاصية ملف function.jsonname.

يتوفر مثيل Event Grid عبر المعلمة المكونة في خاصية ملف function.jsonname المكتوبة في شكل func.EventGridEvent.

Event schema

يتم تلقي البيانات لحدث Event Grid كعنصر JSON في نص طلب HTTP. تبدو JSON مماثلة للمثال التالي:

[{
  "topic": "/subscriptions/{subscriptionid}/resourceGroups/eg0122/providers/Microsoft.Storage/storageAccounts/egblobstore",
  "subject": "/blobServices/default/containers/{containername}/blobs/blobname.jpg",
  "eventType": "Microsoft.Storage.BlobCreated",
  "eventTime": "2018-01-23T17:02:19.6069787Z",
  "id": "{guid}",
  "data": {
    "api": "PutBlockList",
    "clientRequestId": "{guid}",
    "requestId": "{guid}",
    "eTag": "0x8D562831044DDD0",
    "contentType": "application/octet-stream",
    "contentLength": 2248,
    "blobType": "BlockBlob",
    "url": "https://egblobstore.blob.core.windows.net/{containername}/blobname.jpg",
    "sequencer": "000000000000272D000000000003D60F",
    "storageDiagnostics": {
      "batchId": "{guid}"
    }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

المثال المعروض هو صفيف عنصر واحد. ترسل Event Grid صفيفًا دائمًا وقد ترسل أكثر من حدث واحد في الصفيف. يستدعي وقت التشغيل الدالة مرة واحدة لكل عنصر صفيف.

خصائص المستوى الأعلى في بيانات JSON للحدث هي نفسها بين كل أنواع الأحداث، بينما محتويات خاصية data تكون خاصة بكل نوع حدث. المثال الموضح خاص بحدث تخزين كائن ثنائي كبير الحجم.

للحصول على توضيحات للخصائص المشتركة والخاصة بالحدث، راجع خصائص الحدث في وثائق Event Grid.

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