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


Краткое руководство. Отправка и получение сообщений из раздела пространства имен Сетка событий Azure (.NET)

При работе с этим кратким руководством вы выполните следующие действия:

  1. Создайте пространство имен сетки событий с помощью портал Azure.
  2. Создайте раздел пространства имен сетки событий с помощью портал Azure.
  3. Создайте подписку на события с помощью портал Azure.
  4. Создание консольного приложения .NET для отправки набора сообщений в раздел
  5. Напишите консольное приложение .NET для получения этих сообщений из раздела.

Примечание.

В этом кратком руководстве приведены пошаговые инструкции по реализации простого сценария отправки пакета сообщений в раздел пространства имен сетки событий и их получение. Общие сведения о клиентской библиотеке .NET см. в Сетка событий Azure клиентской библиотеке для .NET. Дополнительные примеры см. в примерах сетки событий .NET на сайте GitHub.

Необходимые компоненты

Если вы не знакомы со службой, ознакомьтесь с общими сведениями о сетке событий перед этим кратким руководством.

  • Подписка Azure. Чтобы использовать службы Azure, включая Сетка событий Azure, требуется подписка. Если у вас нет существующей учетной записи Azure, вы можете зарегистрироваться и получить бесплатную пробную версию.
  • Visual Studio 2022. Пример приложения использует новые функции, представленные в C# 10. Чтобы использовать последний синтаксис, рекомендуется установить .NET 6.0 или более позднюю версию latestязыка. Если вы используете Visual Studio, версии до Visual Studio 2022 несовместимы с инструментами, необходимыми для сборки проектов C# 10.

Создание пространства имен на портале Azure

Пространство имен в Сетка событий Azure — это логический контейнер для одной или нескольких тем, клиентов, групп клиентов, пространств разделов и привязок разрешений. Он предоставляет уникальное пространство имен, что позволяет иметь несколько ресурсов в одном регионе Azure. С помощью пространства имен Сетка событий Azure теперь можно группировать связанные ресурсы и управлять ими в рамках одной единицы в подписке Azure.

Выполните следующие разделы, чтобы создать, просмотреть и управлять пространством имен Сетка событий Azure.

Создание пространства имен службы:

  1. Войдите на портал Azure.

  2. В поле поиска введите пространства имен сетки событий и выберите пространства имен сетки событий из результатов.

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

  3. На странице "Пространства имен сетки событий" нажмите кнопку "+ Создать" на панели инструментов.

    Снимок экрана: страница

  4. На странице "Основы" выполните следующие действия.

    1. Выберите подписку Azure, в которой нужно создать пространство имен.

    2. Выберите имеющуюся группу ресурсов или создайте новую.

    3. Введите имя для пространства имен.

    4. Выберите регион или расположение , в котором нужно создать пространство имен.

    5. В нижней части страницы выберите Review + create (Проверить и создать).

      Снимок экрана: вкладка

  5. На вкладке "Просмотр и создание" просмотрите параметры и нажмите кнопку "Создать".

  6. На странице "Развертывание выполнено успешно" выберите "Перейти к ресурсу", чтобы перейти к пространству имен.

Создание раздела пространства имен

  1. Если вы не находитесь на странице пространства имен сетки событий, следуйте инструкциям по созданию, просмотру пространств имен и управлению ими, чтобы просмотреть пространство имен, которое вы хотите использовать для создания раздела.

  2. На странице пространства имен сетки событий выберите пункт "Темы" в разделе "События" в меню слева.

  3. На странице "Темы" нажмите кнопку "+ Раздел" на панели команд.

    Снимок экрана: создание раздела пространства имен сетки событий.

  4. На странице "Создание раздела" введите имя темы, которую вы хотите создать, и нажмите кнопку "Создать".

    Снимок экрана: основы создания раздела пространства имен сетки событий.

Создание подписки на событие

  1. Если вы находитесь на странице разделов пространства имен Сетки событий в портал Azure, выберите раздел из списка тем. Если вы находитесь на странице тем , следуйте инструкциям по созданию, просмотру и управлению разделами пространства имен, чтобы определить тему, которую вы хотите использовать для создания подписки на события.

  2. На странице "Раздел пространства имен "События Gird" выберите пункт "Подписки" в разделе "Сущности" в меню слева.

  3. На странице "Подписки" нажмите кнопку "+ Подписка" на панели команд.

    Снимок экрана: создание подписки на события Сетки событий.

  4. На вкладке "Основные сведения" введите имя темы, которую вы хотите создать, и нажмите кнопку "Далее: фильтры" в нижней части страницы .

    Снимок экрана: подписка на события

  5. На вкладке "Фильтры" добавьте имена типов событий, которые нужно отфильтровать в подписке, и добавить фильтры атрибутов контекста, которые вы хотите использовать в подписке. Затем нажмите кнопку Далее: Дополнительные функции в нижней части страницы.

    Снимок экрана: подписка на события

  6. На вкладке "Дополнительные функции" можно указать хранение событий, максимальное количество доставки, длительность блокировки и параметры недоставки.

    Снимок экрана: подписка на события

  7. Выберите Создать, чтобы создать подписку на события.

Проверка подлинности приложения в Azure

В этом кратком руководстве показано, как подключиться к Сетка событий Azure: строка подключения.

В этом документе показано, как использовать строка подключения для подключения к пространству имен сетки событий. Если вы не знакомы с Azure, вы можете найти вариант строка подключения проще следовать.

Создание нового пространства имен Сетки событий автоматически создает начальный первичный и вторичный ключ, который каждый предоставляет полный контроль над всеми аспектами пространства имен или тем.

Клиент может использовать строка подключения для подключения к пространству имен Сетки событий. Чтобы скопировать ключи доступа для раздела пространства имен, выполните следующие действия.

  1. На странице пространства имен сетки событий выберите разделы.
  2. Выберите раздел, к который требуется получить доступ.
  3. На странице "Ключи доступа" нажмите кнопку копирования рядом с ключом 1 или ключом 2, чтобы скопировать ключи доступа в буфер обмена для последующего использования. Вставьте на время эти значения в Блокноте или любом другом месте.

Запуск Visual Studio

Вы можете авторизовать доступ к пространству имен Сетки событий, выполнив следующие действия.

Запустите Visual Studio. Если появится окно "Начало работы ", выберите " Продолжить без ссылки на код " в правой области.

Отправка сообщений в раздел

В этом разделе показано, как создать консольное приложение .NET для отправки сообщений в раздел "Сетка событий".

Создание консольного приложение

  1. В Visual Studio выберите "Файл ->Создать -> Проект ".

  2. В диалоговом окне Создать проект выполните следующие действия: (если это диалоговое окно не отображается, щелкните в меню пункт Файл, затем последовательно выберите Создать и Проект).

    1. Выберите язык программирования C#.

    2. Для типа приложения выберите значение Консоль.

    3. Выберите консольное приложение из списка результатов.

    4. Затем выберите Далее.

      Снимок экрана: диалоговое окно

  3. Введите EventSender для имени проекта, EventGridQuickStart для имени решения и нажмите кнопку "Далее".

    Снимок экрана: имена решений и проектов в диалоговом окне

  4. На странице Дополнительная информация выберите Создать для создания решения и проекта.

Добавление пакетов NuGet в проект

  1. Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  2. Выполните следующую команду, чтобы установить пакет NuGet Azure.Messaging.EventGrid :

    Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.1
    

Добавление кода для отправки события в раздел пространства имен

  1. Замените все содержимое Program.cs следующим кодом: Ниже описаны важные шаги с дополнительными сведениями в комментариях кода.

    Внимание

    Обновите значения заполнителей (<ENDPOINT>, , <TOPIC-NAME><TOPIC-ACCESS-KEY>) <TOPIC-SUBSCRIPTION-NAME>в фрагменте кода с помощью конечной точки раздела, имени раздела, ключа раздела, имени подписки раздела.

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;    
    
    // TODO: Replace the <ENDPOINT> , <TOPIC-KEY> and <TOPIC-NAME> placeholder
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), new AzureKeyCredential(topicKey));
    
    // Publish a single CloudEvent using a custom TestModel for the event data.
    var @ev = new CloudEvent("employee_source", "type", new TestModel { Name = "Bob", Age = 18 });
    await client.PublishCloudEventAsync(topicName, ev);
    
    // Publish a batch of CloudEvents.
    
    await client.PublishCloudEventsAsync(
    topicName,
    new[] {
        new CloudEvent("employee_source", "type", new TestModel { Name = "Tom", Age = 55 }),
        new CloudEvent("employee_source", "type", new TestModel { Name = "Alice", Age = 25 })});
    
    Console.WriteLine("Three events have been published to the topic. Press any key to end the application.");
    Console.ReadKey();
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }    
    
    
  2. Выполните сборку проекта и убедитесь, что она прошла без ошибок.

  3. Выполните программу и дождитесь подтверждающего сообщения.

    Three events have been published to the topic. Press any key to end the application.
    

    Внимание

    В большинстве случаев для распространения назначения ролей в Azure потребуется несколько минут. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.

  4. На портале Azure выполните следующие действия:

    1. Перейдите к пространству имен Сетки событий.

    2. На странице "Обзор" отображается количество событий, размещенных в пространстве имен на диаграмме.

      Снимок экрана: страница пространства имен сетки событий в портал Azure.

Извлечение сообщений из раздела

В этом разделе описано, как создать консольное приложение .NET, которое получает сообщения из раздела.

Создание проекта для получения опубликованных CloudEvents

  1. В окне Обозреватель решений щелкните правой кнопкой мыши решение EventGridQuickStart, наведите указатель мыши на добавление и выберите новый проект.
  2. Выберите Консольное приложение и нажмите Далее.
  3. Введите EventReceiver для имени проекта и нажмите кнопку "Создать".
  4. В окне Обозреватель решений щелкните правой кнопкой мыши EventReceiver и выберите "Задать в качестве запускаемого проекта".

Добавление пакетов NuGet в проект

  1. Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  2. Выполните следующую команду, чтобы установить пакет NuGet Для Azure.Messaging.EventGrid . Выберите EventReceiver для проекта по умолчанию, если он еще не задан.

    Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.1
    

    Снимок экрана: проект EventReceiver, выбранный в консоли диспетчер пакетов.

Добавление кода для получения событий из раздела

В этом разделе вы добавите код для получения сообщений из очереди.

  1. Program В классе добавьте следующий код:

    Внимание

    Обновите значения заполнителей (<ENDPOINT>, , <TOPIC-NAME><TOPIC-ACCESS-KEY>) <TOPIC-SUBSCRIPTION-NAME>в фрагменте кода с помощью конечной точки раздела, имени раздела, ключа раздела, имени подписки раздела.

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents
    ReceiveResult result = await client.ReceiveCloudEventsAsync(topicName, subscription, 3);
    
    Console.WriteLine("Received Response");
    Console.WriteLine("-----------------");
    
    
  2. Добавьте следующие методы в конец Program класса.

    // handle received messages. Define these variables on the top.
    
    var toRelease = new List<string>();
    var toAcknowledge = new List<string>();
    var toReject = new List<string>();
    
    // Iterate through the results and collect the lock tokens for events we want to release/acknowledge/result
    
    foreach (ReceiveDetails detail in result.Value)
    {
        CloudEvent @event = detail.Event;
        BrokerProperties brokerProperties = detail.BrokerProperties;
        Console.WriteLine(@event.Data.ToString());
    
        // The lock token is used to acknowledge, reject or release the event
        Console.WriteLine(brokerProperties.LockToken);
        Console.WriteLine();
    
        // If the event is from the "employee_source" and the name is "Bob", we are not able to acknowledge it yet, so we release it
        if (@event.Source == "employee_source" && @event.Data.ToObjectFromJson<TestModel>().Name == "Bob")
        {
            toRelease.Add(brokerProperties.LockToken);
        }
        // acknowledge other employee_source events
        else if (@event.Source == "employee_source")
        {
            toAcknowledge.Add(brokerProperties.LockToken);
        }
        // reject all other events
        else
        {
            toReject.Add(brokerProperties.LockToken);
        }
    }
    
    // Release/acknowledge/reject the events
    
    if (toRelease.Count > 0)
    {
        ReleaseResult releaseResult = await client.ReleaseCloudEventsAsync(topicName, subscription, new ReleaseOptions(toRelease));
    
        // Inspect the Release result
        Console.WriteLine($"Failed count for Release: {releaseResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in releaseResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Release: {releaseResult.SucceededLockTokens.Count}");
        foreach (string lockToken in releaseResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toAcknowledge.Count > 0)
    {
        AcknowledgeResult acknowledgeResult = await client.AcknowledgeCloudEventsAsync(topicName, subscription, new AcknowledgeOptions(toAcknowledge));
    
        // Inspect the Acknowledge result
        Console.WriteLine($"Failed count for Acknowledge: {acknowledgeResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in acknowledgeResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Acknowledge: {acknowledgeResult.SucceededLockTokens.Count}");
        foreach (string lockToken in acknowledgeResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toReject.Count > 0)
    {
        RejectResult rejectResult = await client.RejectCloudEventsAsync(topicName, subscription, new RejectOptions(toReject));
    
        // Inspect the Reject result
        Console.WriteLine($"Failed count for Reject: {rejectResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in rejectResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Reject: {rejectResult.SucceededLockTokens.Count}");
        foreach (string lockToken in rejectResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }    
    

Очистка ресурсов

Перейдите к пространству имен Сетки событий в портал Azure и выберите "Удалить" в портал Azure, чтобы удалить пространство имен сетки событий и раздел в нем.

См . справочник по API .NET.