0Pricing
Cloud & IT Cert Prep · درس

Event Grid والبنية المستندة إلى الأحداث

وجّه الأحداث من خدمات Azure والناشرين المخصصين باستخدام Event Grid، ووزّعها على عدة مشتركين، وقارن Event Grid بـ Event Hubs وService Bus.

Event Grid والبنية المستندة إلى الأحداث درس مجاني في Cloud & IT Cert Prep على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cloud & IT Cert Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.

ما المقصود بالبنية المعمارية المعتمدة على الأحداث؟

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

ما المقصود بـ Azure Event Grid؟

إن Azure Event Grid خدمة مُدارة بالكامل لتوجيه الأحداث، تُسلّم الأحداث من المصادر (الناشرين) إلى معالجاتها (المشتركين) باستخدام نموذج الدفع. صُممت Event Grid للتعامل مع الأحداث التفاعلية المنفصلة — أي عندما يحدث تغيير وتحتاج إلى الاستجابة له فورًا. وتضمن التسليم مرة واحدة على الأقل مع إعادة المحاولة تلقائيًا، وتدعم التصفية بحيث لا يتلقى المشتركون إلا الأحداث ذات الصلة، كما يمكنها توجيه الأحداث إلى Azure Functions وLogic Apps وwebhooks وEvent Hubs وقوائم انتظار Service Bus.

مواضيع Event Grid واشتراكات الأحداث

يرسل الناشرون الأحداث إلى موضوع Event Grid. وينشئ المشتركون اشتراكات أحداث على موضوع ما، مع تحديد نقطة نهاية وقواعد تصفية اختيارية. ويمكن أن يحتوي الموضوع الواحد على اشتراكات متعددة — إذ تتلقى كل اشتراكة نسخة مستقلة من الأحداث المطابقة. وتُعد خدمات Azure مثل Blob Storage وResource Manager وService Bus وAzure Container Registry مصادر أحداث مضمّنة، مع مواضيع نظام لا تتطلب أي إعداد إضافي.

# Create a custom Event Grid topic
az eventgrid topic create \
  --name MyEventTopic \
  --resource-group MyRG \
  --location eastus

# Create a subscription routing to an Azure Function
az eventgrid event-subscription create \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../providers/Microsoft.EventGrid/topics/MyEventTopic' \
  --endpoint '/subscriptions/.../providers/Microsoft.Web/sites/myFunctionApp/functions/EventHandler'

مخطط الأحداث

تتبع الأحداث المنشورة إلى Event Grid مخطط JSON قياسيًا يتضمن حقولًا إلزامية: id (معرّف فريد)، وeventType (مثل Microsoft.Storage.BlobCreated)، وsubject (مسار مورد الحدث)، وeventTime (طابع زمني بتنسيق ISO 8601)، وdataVersion، وdata (الحمولة الخاصة بالحدث). كما تدعم Event Grid مخطط CloudEvents (معيار CNCF) للتوافق مع منصات الأحداث الأخرى.

// Event Grid event payload (Event Grid schema)
[
  {
    'id': 'b781910b-3000-4f19-a4c2-b6b9c4ca7a12',
    'eventType': 'Microsoft.Storage.BlobCreated',
    'subject': '/blobServices/default/containers/uploads/blobs/photo.jpg',
    'eventTime': '2025-01-15T12:30:00.000Z',
    'data': {
      'api': 'PutBlockList',
      'url': 'https://mystorageacct.blob.core.windows.net/uploads/photo.jpg',
      'contentType': 'image/jpeg',
      'contentLength': 524288
    },
    'dataVersion': '',
    'metadataVersion': '1'
  }
]

تصفية الأحداث

تدعم اشتراكات الأحداث التصفية لتقليل الضوضاء لدى المشترك. ويمكنك التصفية حسب نوع الحدث (تلقي BlobCreated فقط، وليس BlobDeleted)، أو بادئة الموضوع أو لاحقته (تلقي الكائنات الثنائية الكبيرة الموجودة في حاوية معينة فقط)، أو استخدام عوامل التصفية المتقدمة على أي حقل في بيانات الحدث، باستخدام عوامل مثل StringContains وNumberGreaterThan وBoolEquals. وتحدث التصفية على جانب الخادم، لذلك لا يتلقى المشتركون إلا الأحداث المطابقة لمعاييرهم.

# Subscribe to BlobCreated events for .jpg files only
az eventgrid event-subscription create \
  --name jpgImageSub \
  --source-resource-id '/subscriptions/.../storageAccounts/mystorageaccount' \
  --endpoint 'https://myfunction.azurewebsites.net/api/ProcessImage' \
  --included-event-types 'Microsoft.Storage.BlobCreated' \
  --subject-ends-with '.jpg'

مقارنة Event Grid وEvent Hubs وService Bus

تتعامل ثلاث خدمات من Azure مع الأحداث والرسائل — فاختر الخدمة بناءً على السيناريو لديك. تُستخدم Event Grid لتوجيه الأحداث التفاعلية (حجم منخفض، وأحداث منفصلة وتفاعلية — مثل إشعار بتغيير مورد). وتُستخدم Event Hubs لبث الأحداث بمعدل نقل مرتفع (ملايين الأحداث في الثانية، والقياس عن بُعد، ومسارات البيانات الضخمة). أما Service Bus فتُستخدم للمراسلة المؤسسية التي تتطلب الترتيب وإزالة التكرارات وقوائم الرسائل غير القابلة للتسليم والمعاملات (مثل معالجة الطلبات والمعاملات المالية).

// Decision guide:
// Event Grid  — 'Something happened, react to it'
//               Azure resource events, webhooks, low-latency fan-out
//               Price: per event (cheap for low volume)

// Event Hubs  — 'Capture a firehose of streaming data'
//               IoT telemetry, log aggregation, real-time analytics
//               Price: per throughput unit + capture

// Service Bus — 'Reliable message delivery between services'
//               Order processing, workflow steps, dead-letter queues
//               Price: per operation + messaging units

نشر الأحداث المخصصة

انشر الأحداث المخصصة إلى موضوع Event Grid باستخدام طلب HTTP POST بسيط مع مفتاح الوصول الخاص بالموضوع. ويمكن لأي خدمة أو تطبيق قادر على إجراء طلبات HTTP نشر الأحداث. وهذا يجعل إصدار الأحداث من التطبيقات المحلية أو الخدمات التابعة لجهات خارجية أو خدمات Azure التي لا تدعم Event Grid بشكل أصلي أمرًا سهلًا للغاية. ويمكن تجميع أحداث يصل حجمها إلى 1 ميغابايت لكل POST لتحسين الكفاءة.

# Get the topic endpoint and key
TOPIC_ENDPOINT=$(az eventgrid topic show --name MyEventTopic --resource-group MyRG --query endpoint -o tsv)
TOPIC_KEY=$(az eventgrid topic key list --name MyEventTopic --resource-group MyRG --query key1 -o tsv)

# Publish a custom event
curl -X POST $TOPIC_ENDPOINT \
  -H 'Content-Type: application/json' \
  -H "aeg-sas-key: $TOPIC_KEY" \
  -d '[{
    "id": "event-001",
    "eventType": "Contoso.OrderPlaced",
    "subject": "/orders/ORD-12345",
    "eventTime": "2025-01-15T12:00:00Z",
    "data": { "orderId": "ORD-12345", "total": 99.99 },
    "dataVersion": "1.0"
  }]'

سياسات إعادة المحاولة والرسائل غير القابلة للتسليم

إذا فشلت محاولة تسليم حدث (أي أعاد المشترك استجابة HTTP غير 2xx)، تعيد Event Grid المحاولة باستخدام تراجع أُسّي مع عشوائية لمدة تصل إلى 24 ساعة (يمكن ضبطها لتصل إلى 72 ساعة)، وبحد أقصى 30 محاولة. وبعد استنفاد محاولات إعادة المحاولة، يمكن لـ Event Grid وضع الأحداث غير المُسلّمة في قائمة الرسائل غير القابلة للتسليم داخل حاوية Azure Blob Storage للتحقيق اليدوي. فعّل هذه الميزة عندما يكون تسليم الأحداث الموثوق أمرًا بالغ الأهمية وتحتاج إلى تدقيق الأحداث الفاشلة أو إعادة معالجتها.

# Configure dead-letter storage and retry for a subscription
az eventgrid event-subscription update \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../topics/MyEventTopic' \
  --deadletter-endpoint '/subscriptions/.../storageAccounts/mystg/blobServices/default/containers/deadletter' \
  --max-delivery-attempts 30 \
  --event-ttl 1440  # 24 hours in minutes

نظرة عامة على Azure Event Hubs

إن Azure Event Hubs منصة موزعة لبث البيانات، قادرة على استقبال ملايين الأحداث ومعالجتها في الثانية. وتستخدم نموذج المستهلكين المقسّم إلى أقسام — إذ تُوزّع الأحداث عبر الأقسام، وتقرأ كل مجموعة مستهلكين الأحداث بشكل مستقل وبالسرعة التي تناسبها. ويتيح ذلك لمستهلكين متعددين معالجة الدفق نفسه دون تنسيق فيما بينهم. وتشمل حالات الاستخدام الشائعة استيعاب بيانات القياس عن بُعد لأجهزة إنترنت الأشياء، وتجميع سجلات التطبيقات، وتحليل تدفقات النقرات، ومسارات بيانات لوحات المعلومات في الوقت الفعلي.

# Create an Event Hubs namespace and hub
az eventhubs namespace create \
  --name myEventHubNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az eventhubs eventhub create \
  --name telemetry \
  --namespace-name myEventHubNS \
  --resource-group MyRG \
  --partition-count 8 \
  --message-retention 3  # Days to retain events

Azure Service Bus للمراسلة الموثوقة

إن Azure Service Bus وسيط مراسلة مؤسسي يوفر قوائم الانتظار (من نقطة إلى نقطة) والمواضيع مع الاشتراكات (النشر والاشتراك). وعلى خلاف Event Grid (إرسال دون انتظار النتيجة) وEvent Hubs (البث)، تضمن Service Bus التسليم بالترتيب (قوائم انتظار FIFO)، واكتشاف التكرارات، وقوائم انتظار الرسائل غير القابلة للتسليم لفشل المعالجة، وجلسات الرسائل للمعالجة المجمّعة، والمعاملات — وهي جميعًا ضرورية لسير عمل المعالجة المالية ومعالجة الطلبات.

# Create a Service Bus namespace and queue
az servicebus namespace create \
  --name myServiceBusNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az servicebus queue create \
  --name order-processing \
  --namespace-name myServiceBusNS \
  --resource-group MyRG \
  --enable-dead-lettering-on-message-expiration true \
  --max-delivery-count 10  # Move to dead-letter after 10 failed attempts

نمط عملي معتمد على الأحداث: معالجة الملفات

من الأنماط الشائعة في Azure والمعتمدة على الأحداث: يحمّل مستخدم ملفًا إلى Blob Storage، فتُطلق الخدمة حدث BlobCreated إلى Event Grid. وتوجّه Event Grid الحدث إلى Azure Function تعالج الملف (تغيّر حجم صورة، أو تستخرج نصًا، أو تتحقق من صحة البيانات)، ثم تكتب النتيجة إلى Azure SQL Database. وإذا فشلت المعالجة، يُوضَع الحدث في قائمة الرسائل غير القابلة للتسليم داخل حاوية تخزين. لا تتطلب هذه المسارات أي استقصاء دوري، ولا تتطلب موارد حوسبة مستمرة عند الخمول.

// Azure Function: process image on BlobCreated event
module.exports = async function (context, eventGridEvent) {
  const blobUrl = eventGridEvent.data.url;
  const blobName = eventGridEvent.subject.split('/blobs/').pop();

  context.log('Processing image:', blobName);

  // Process via Cognitive Services Vision API
  const tags = await analyzeImage(blobUrl);

  // Write metadata to Cosmos DB via output binding
  context.bindings.cosmosOutput = {
    id: blobName,
    tags,
    processedAt: new Date().toISOString()
  };

  context.log('Processing complete for:', blobName);
};

تحقق سريع

اختبر مدى فهمك لمفاهيم Microsoft Azure Fundamentals (AZ-900) التي تناولها هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس أن Azure Event Grid توجّه الأحداث المنفصلة من الناشرين إلى المشتركين باستخدام التسليم بالدفع مع التصفية ووضع الأحداث غير المُسلّمة في قائمة مخصصة، وتعرفت على الفرق الأساسي بين Event Grid (الأحداث التفاعلية) وEvent Hubs (البث) وService Bus (المراسلة المؤسسية الموثوقة)، وكيفية إنشاء مسارات معتمدة على الأحداث من خلال ربط أحداث Blob Storage عبر Event Grid بـ Azure Functions. في الجزء التالي، سنستكشف خدمات Azure DevOps.

الأسئلة الشائعة

هل درس «Event Grid والبنية المستندة إلى الأحداث» مجاني؟

نعم — نص درس «Event Grid والبنية المستندة إلى الأحداث» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cloud & IT Cert Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.

ماذا ستتعلم في «Event Grid والبنية المستندة إلى الأحداث»؟

وجّه الأحداث من خدمات Azure والناشرين المخصصين باستخدام Event Grid، ووزّعها على عدة مشتركين، وقارن Event Grid بـ Event Hubs وService Bus. تتمرن على Cloud & IT Cert Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cloud & IT Cert Prep؟

لا تُشترط خبرة سابقة. Cloud & IT Cert Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «Event Grid والبنية المستندة إلى الأحداث»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cloud & IT Cert Prep هذا؟

نعم. كل درس في Cloud & IT Cert Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المشغّلات والارتباطات في Azure Functions
  2. Durable Functions لسير العمل ذي الحالة
  3. Azure Logic Apps
  4. Event Grid والبنية المستندة إلى الأحداث
← العودة إلى Cloud & IT Cert Prep