Поделиться через


Схема CloudEvents версии 1.0 со службой "Сетка событий Azure"

Сетка событий Azure изначально поддерживает события в Реализация JSON для привязки протокола CloudEvents версии 1.0 и ПРОТОКОЛА HTTP. CloudEventsоткрытая спецификация для описания данных о событиях. CloudEvents упрощает взаимодействие, предоставляя общую схему событий для публикации и использования событий на основе облака. Эта схема предоставляет обычные средства, стандартные способы маршрутизации и обработки событий, а также универсальные методы десериализации внешней схемы событий. Общая схема позволяет легко интегрировать работу на разных платформах.

Создание CloudEvents — это совместная работа нескольких компаний, включая корпорацию Майкрософт и компанию Cloud Native Computing Foundation. В настоящее время доступна версия 1.0.

В этой статье описывается использование схемы CloudEvents с сеткой событий.

Пример события с использованием схемы CloudEvents

Ниже приведен пример события Хранилище BLOB-объектов Azure в формате 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 версии 1.0 можно изучить здесь.

Значения заголовков для событий, доставляемых в схеме CloudEvents и схеме "Сетка событий", совпадают, за исключением элемента content-type. Для схемы CloudEvents значение заголовка — "content-type":"application/cloudevents+json; charset=utf-8". Для схемы "Сетка событий" значение заголовка — "content-type":"application/json; charset=utf-8".

Конфигурация для CloudEvents

Службу "Сетка событий" можно использовать для ввода и вывода событий в схеме CloudEvents. Кроме того, CloudEvents можно использовать для системных событий, таких как события хранилища BLOB-объектов и Центра Интернета вещей, а также настраиваемые события. Помимо поддержки CloudEvents, Служба "Сетка событий" поддерживает собственный, нетекстенсивный, но полностью функциональный формат событий Сетки событий. В следующей таблице описывается преобразование, поддерживаемое при использовании CloudEvents и форматов Сетки событий в качестве входной схемы в разделах и в качестве выходной схемы в подписках на события. Выходная схема Сетки событий не может использоваться при использовании CloudEvents в качестве входной схемы, так как CloudEvents поддерживает атрибуты расширения, которые не поддерживаются схемой сетки событий.

Входная схема Выходная схема
Формат CloudEvents Формат CloudEvents
Формат сетки событий Формат CloudEvents
Формат сетки событий Формат сетки событий

Для всех схем событий сетка событий требует проверки при публикации в разделе сетки событий и при создании подписки на события. Дополнительные сведения см. в разделе Сетка событий: безопасность и проверка подлинности.

Входная схема

Вы задаете входную схему для пользовательского раздела при создании настраиваемого input-schema раздела с помощью параметра.

При работе с интерфейсом командной строки Azure рекомендуется использовать следующее.

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 рекомендуется использовать следующее.

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# для разработки функций, убедитесь, что вы используете последний пакет NuGet Microsoft.Azure.WebJobs.Extensions.EventGrid NuGet (версия 3.3.1 или выше).

В Visual Studio используйте средства NuGet> диспетчер пакетов ->диспетчер пакетов консоли и выполните Install-Package команду (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1). Кроме того, щелкните правой кнопкой мыши проект в окне Обозреватель решений и выберите меню "Управление пакетами NuGet", чтобы перейти к пакету NuGet и установить или обновить его до последней версии.

В VS Code обновите номер версии пакета Microsoft.Azure.WebJobs.Extensions.EventGrid в файле csproj для проекта Функции Azure.

<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 версии 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

Если вы используете портал Azure для разработки функции Azure, выполните следующие действия:

  1. Обновите имя параметра в function.json файле cloudEventдо .

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. 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.

Сведения о проверке конечных точек с помощью облачных событий см. в разделе "Проверка конечных точек с помощью CloudEvents 1.0".