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

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

إشعار

إذا كنت جديدا على Azure Event Grid، فشاهد ما هي Azure Event Grid للحصول على نظرة عامة على الخدمة قبل الانتقال إلى هذا البرنامج التعليمي.

عند الانتهاء، ترى أن بيانات الحدث قد أُرسِلت إلى تطبيق الويب.

عرض النتائج

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

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

إنشاء مجموعة موارد

مواضيع شبكة الأحداث هي موارد Azure، ويجب وضعها في مجموعة موارد Azure. مجموعة الموارد هي عبارة عن مجموعة منطقية يتم فيها توزيع جميع موارد Azure وإدارتها.

قم بإنشاء مجموعة موارد باستخدام أمرNew-AzResourceGroup.

ينشئ المثال التالي مجموعة موارد باسم gridResourceGroup في موقع westus2.

New-AzResourceGroup -Name gridResourceGroup -Location westus2

تمكين موفر موارد Event Grid

إذا لم تكن قد استخدمت Event Grid في اشتراك Azure من قبل، فقد تحتاج إلى تسجيل موفر موارد Event Grid. شغّل الأمر التالي:

Register-AzResourceProvider -ProviderNamespace Microsoft.EventGrid

قد يستغرق التسجيل بعض الوقت. للتحقق من الحالة، قم بتشغيل:

Get-AzResourceProvider -ProviderNamespace Microsoft.EventGrid

عندما RegistrationStatusيكونRegistered، كنت على استعداد للمتابعة.

إنشاء موضوع مخصص

يوفر موضوع Event Grid نقطة نهاية معرّفة من قِبل المستخدم تقوم بنشر الأحداث إليها. ينشئ المثال التالي الموضوع المخصص في مجموعة الموارد الخاصة بك. استبدل <your-topic-name> باسم فريد لموضوعك: يجب أن يكون اسم الموضوع فريدا لأنه جزء من إدخال نظام أسماء المجالات (DNS). بالإضافة إلى ذلك، يجب أن يكون الاسم مكونًا من عدد أحرف بين 3 إلى 50 حرفًا وأن يحتوي فقط على القيم a-z وA-Z و0-9 و"-".

$topicname="<your-topic-name>"

New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westus2 -Name $topicname

قم بإنشاء نقطة نهاية للرسالة

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

استبدل <your-site-name> باسم فريد من أجل تطبيق الويب الخاص بك. يجب أن يكون اسم تطبيق الويب فريدًا؛ لأنه جزء من إدخال DNS.

$sitename="<your-site-name>"

New-AzResourceGroupDeployment `
  -ResourceGroupName gridResourceGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" `
  -siteName $sitename `
  -hostingPlanName viewerhost

قد يستغرق النشر بضع دقائق حتى يكتمل. بعد نجاح عملية النشر، اطّلع على تطبيق الويب الخاص بك؛ للتأكد من أنه يعمل. في مستعرض ويب، انتقل إلى: https://<your-site-name>.azurewebsites.net

يجب أن تشاهد الموقع الذي لا توجد به رسائل معروضة حاليا.

اشترك في الموضوع

في هذه الخطوة، سوف تشترك في موضوع ما لإخبار شبكة الحدث بالأحداث التي تريد تتبعها، ومكان إرسال الأحداث. يشترك المثال التالي في الموضوع الذي أنشأته، ويمرر عنوان URL من تطبيق الويب كنقطة نهاية لإعلام الحدث.

ينبغي أن تتضمن نقطة النهاية لتطبيق الويب الخاص بك اللاحقة /api/updates/.

$endpoint="https://$sitename.azurewebsites.net/api/updates"

New-AzEventGridSubscription `
  -EventSubscriptionName demoViewerSub `
  -Endpoint $endpoint `
  -ResourceGroupName gridResourceGroup `
  -TopicName $topicname

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

عرض حدث الاشتراك

إرسال حدث إلى الموضوع

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

$endpoint = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicname).Endpoint
$keys = Get-AzEventGridTopicKey -ResourceGroupName gridResourceGroup -Name $topicname

لتبسيط هذه المقالة، سوف نقوم بإعداد نموذج بيانات الحدث لإرسالها إلى الموضوع المخصص. بشكل عام، يُرسل التطبيق أو خدمة Azure بيانات الحدث. يستخدم المثال التالي Hashtable لإنشاء بيانات الحدث htbody ثم تحويلها إلى well-formed JSON payload object $body :

$eventID = Get-Random 99999

#Date format should be SortableDateTimePattern (ISO 8601)
$eventDate = Get-Date -Format s

#Construct body using Hashtable
$htbody = @{
    id= $eventID
    eventType="recordInserted"
    subject="myapp/vehicles/motorcycles"
    eventTime= $eventDate   
    data= @{
        make="Ducati"
        model="Monster"
    }
    dataVersion="1.0"
}

#Use ConvertTo-Json to convert event body from Hashtable to JSON Object
#Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
$body = "["+(ConvertTo-Json $htbody)+"]"

إذا قمت بعرض $body، فسوف ترى الحدث كاملاً. يكون عنصر data JSON هو حمولة الحدث. يمكن لأي JSON تم تشكيله بشكل جيد أن يذهب في هذا المجال. يمكنك أيضًا استخدام حقل الموضوع للتوجيه والتصفية المتقدمين.

الآن، أرسل الحدث إلى الموضوع الخاص بك.

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

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

[{
  "id": "1807",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2018-01-25T15:58:13",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "topic": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/topics/{topic}"
}]

تنظيف الموارد

في حال كنت تخطط لمتابعة العمل مع هذا الحدث أو تطبيق عرض الحدث، لا تحذف الموارد التي تم إنشاؤها في هذه المقالة. وخلاف ذلك، استخدم الأمر التالي لحذف الموارد التي قمت بإنشائها في هذه المقالة.

Remove-AzResourceGroup -Name gridResourceGroup

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

الآن بعد أن عرفت كيفية إنشاء مواضيع مخصصة واشتراكات الأحداث، تعرف على المزيد حول ما يمكن أن تساعدك شبكة الأحداث على القيام به:

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