Краткое руководство. Отправка и получение сообщений из раздела пространства имен Сетка событий 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. На вкладке "Основные сведения" выполните следующие действия.

    1. Введите имя для создаваемой подписки.

    2. Убедитесь, что схема доставки задана cloud Events версии 1.0.

    3. Убедитесь, что для режима доставки задано значение Queue (режим извлечения).

    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.Namespaces
    

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

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

    Внимание

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

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;
    
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace. Prefix it with https://.
    // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>";
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridSenderClient(new Uri(namespaceEndpoint), topicName, 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.SendAsync(ev);
    
    // Publish a batch of CloudEvents.
    
    await client.SendAsync(
    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.Namespaces
    

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

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

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

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

    Внимание

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

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace
    // Example: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Name of the subscription to the topic
    var subscriptionName = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Maximum number of events you want to receive
    const short MaxEventCount = 3;
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridReceiverClient(new Uri(namespaceEndpoint), topicName, subscriptionName, new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents. 
    ReceiveResult result = await client.ReceiveAsync(MaxEventCount);
    
    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.Details)
    {
        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.ReleaseAsync(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.AcknowledgeAsync(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.RejectAsync(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; }
    }    
    
    
  3. В окне Обозреватель решений щелкните правой кнопкой мыши проект EventReceiver и выберите "Задать как проект запуска".

  4. Выполните сборку проекта и убедитесь, что она прошла без ошибок.

  5. Запустите приложение EventReceiver и подтвердите, что в окне вывода отображаются три события.

    Снимок экрана: выходные данные из приложения-получателя.

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

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

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