مخطط CloudEvents v1.0 مع Azure Event Grid
تدعم Azure Event Grid الأحداث في الأصل في تنفيذ JSON ل CloudEvents v1.0 وربط بروتوكول HTTP. CloudEvents مواصفة مفتوحة لوصف بيانات الحدث. تعمل CloudEvents على تبسيط إمكانية التشغيل المتداخل من خلال توفير مخطط حدث شائع للنشر واستهلاك الأحداث المستندة إلى السحابة. يسمح هذا المخطط للأدوات الموحدة، والطرق القياسية لتوجيه ومعالجة الأحداث وطرق عالمية من إلغاء تسلسل مخطط الحدث الخارجي. مع مخطط مشترك، يمكنك دمج العمل بسهولة أكبر عبر الأنظمة الأساسية.
يتم بناء CloudEvents من قبل العديد من المتعاونين، بما في ذلك Microsoft، من خلال Cloud Native Computing Foundation. وهو متوفرة حالياً بإصدار 1.0.
توضح هذه المقالة استخدام مخطط CloudEvents مع Event Grid.
نموذج حدث يستخدم مخطط CloudEvents
فيما يلي مثال على حدث Azure Blob Storage بتنسيق CloudEvents:
{
"specversion": "1.0",
"type": "Microsoft.Storage.BlobCreated",
"source": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-account}",
"id": "9aeb0fdf-c01e-0131-0922-9eb54906e209",
"time": "2019-11-18T15:13:39.4589254Z",
"subject": "blobServices/default/containers/{storage-container}/blobs/{new-file}",
"data": {
"api": "PutBlockList",
"clientRequestId": "4c5dd7fb-2c48-4a27-bb30-5361b5de920a",
"requestId": "9aeb0fdf-c01e-0131-0922-9eb549000000",
"eTag": "0x8D76C39E4407333",
"contentType": "image/png",
"contentLength": 30699,
"blobType": "BlockBlob",
"url": "https://gridtesting.blob.core.windows.net/testcontainer/{new-file}",
"sequencer": "000000000000000000000000000099240000000000c41c18",
"storageDiagnostics": {
"batchId": "681fe319-3006-00a8-0022-9e7cde000000"
}
}
}
يتوفر هناوصف مفصل للحقول المتوفرة وأنواعها وتعريفاتها في CloudEvents v1.0.
قيم العناوين للأحداث تسليمها في مخطط CloudEvents ومخطط شبكة الأحداث هي نفسها باستثناء content-type
. بالنسبة لمخطط CloudEvents، تكون قيمة العنوان هذه هي "content-type":"application/cloudevents+json; charset=utf-8"
. بالنسبة إلى Event Grid schema، تكون قيمة العنوان هذه هي "content-type":"application/json; charset=utf-8"
.
تكوين CloudEvents
يمكنك استخدام Event Grid لكل من الإدخال وإخراج الأحداث في مخطط CloudEvents. يمكنك استخدام CloudEvents لأحداث النظام، مثل أحداث Blob Storage وأحداث IoT Hub والأحداث المخصصة. بالإضافة إلى دعم CloudEvents، تدعم Event Grid تنسيق حدث Event Grid مملوكا وغير قابل للتوسعة ولكنه يعمل بكامل طاقته. يصف الجدول التالي التحويل المدعوم عند استخدام تنسيقات CloudEvents و Event Grid كمخطط إدخال في الموضوعات و كمخطط إخراج في اشتراكات الأحداث. لا يمكن استخدام مخطط إخراج شبكة الأحداث عند استخدام CloudEvents كمخطط إدخال لأن CloudEvents يدعم سمات الملحق غير المعتمدة من قبل مخطط شبكة الأحداث.
مخطط الإدخال | مخطط الإخراج |
---|---|
تنسيق CloudEvents | تنسيق CloudEvents |
تنسيق شبكات الأحداث | تنسيق CloudEvents |
تنسيق شبكات الأحداث | تنسيق شبكات الأحداث |
بالنسبة لجميع مخططات الأحداث، تتطلب Event Grid التحقق من الصحة عند النشر إلى موضوع Event Grid وعند إنشاء اشتراك حدث. لمزيد من المعلومات، راجع أمان Event Grid والمصادقة عليها.
مخطط الإدخال
يمكنك تعيين مخطط الإدخال لموضوع مخصص عند إنشاء الموضوع المخصص باستخدام المعلمة input-schema
.
بالنسبة إلى Azure CLI، استخدم:
az eventgrid topic create --name demotopic -l westcentralus -g gridResourceGroup --input-schema cloudeventschemav1_0
بالنسبة إلى PowerShell، استخدم:
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westcentralus -Name demotopic -InputSchema CloudEventSchemaV1_0
مخطط الإخراج
يمكنك تعيين مخطط الإخراج عند إنشاء اشتراك الحدث باستخدام المعلمة event-delivery-schema
.
بالنسبة إلى Azure CLI، استخدم:
topicID=$(az eventgrid topic show --name demotopic -g gridResourceGroup --query id --output tsv)
az eventgrid event-subscription create --name demotopicsub --source-resource-id $topicID --endpoint <endpoint_URL> --event-delivery-schema cloudeventschemav1_0
بالنسبة إلى PowerShell، استخدم:
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name <topic-name>).Id
New-AzEventGridSubscription -ResourceId $topicid -EventSubscriptionName <event_subscription_name> -Endpoint <endpoint_URL> -DeliverySchema CloudEventSchemaV1_0
استخدام مع وظائف Azure
Visual Studio أو Visual Studio Code
إذا كنت تستخدم Visual Studio أو Visual Studio Code ولغة برمجة C# لتطوير الوظائف، فتأكد من استخدام أحدث حزمة Microsoft.Azure.WebJobs.Extensions.EventGrid NuGet (الإصدار 3.3.1 أو أعلى).
في Visual Studio، استخدم Tools ->NuGet مدير الحِزَم ->مدير الحِزَم Console، وقم بتشغيل Install-Package
الأمر (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1
). بدلا من ذلك، انقر بزر الماوس الأيمن فوق المشروع في نافذة مستكشف الحلول، وحدد إدارة قائمة حزم NuGet للاستعراض بحثا عن حزمة NuGet، وتثبيتها أو تحديثها إلى أحدث إصدار.
في VS Code، قم بتحديث رقم الإصدار لحزمة Microsoft.Azure.WebJobs.Extensions.EventGrid في ملف csproj لمشروع Azure Functions.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.EventGrid" Version="3.3.1" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
يظهر المثال التالي دالة Azure Functions الإصدار 3.x التي تم تطويرها إما في Visual Studio أو Visual Studio Code. يستخدم معلمة CloudEvent
ربط و EventGridTrigger
.
using Azure.Messaging;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public static class CloudEventTriggerFunction
{
[FunctionName("CloudEventTriggerFunction")]
public static void Run(ILogger logger, [EventGridTrigger] CloudEvent e)
{
logger.LogInformation("Event received {type} {subject}", e.Type, e.Subject);
}
}
}
تجربة تطوير مدخل Azure
إذا كنت تستخدم مدخل Microsoft Azure لتطوير دالة Azure، فاتبع الخطوات التالية:
قم بتحديث اسم المعلمة في
function.json
الملف إلىcloudEvent
.{ "bindings": [ { "type": "eventGridTrigger", "name": "cloudEvent", "direction": "in" } ] }
run.csx
تحديث الملف كما هو موضح في نموذج التعليمات البرمجية التالي.#r "Azure.Core" using Azure.Messaging; public static void Run(CloudEvent cloudEvent, ILogger logger) { logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject); }
إشعار
لمزيد من المعلومات، راجع مشغل شبكة حدث Azure لدوال Azure.
المحتوى ذو الصلة
للحصول على معلومات حول التحقق من صحة نقطة النهاية باستخدام Cloud Events، راجع التحقق من صحة نقطة النهاية باستخدام CloudEvents 1.0.