Краткое руководство. Отправка и получение сообщений из раздела пространства имен Сетка событий Azure (.NET)
При работе с этим кратким руководством вы выполните следующие действия:
- Создайте пространство имен сетки событий с помощью портал Azure.
- Создайте раздел пространства имен сетки событий с помощью портал Azure.
- Создайте подписку на события с помощью портал Azure.
- Создание консольного приложения .NET для отправки набора сообщений в раздел
- Напишите консольное приложение .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.
Создание пространства имен службы:
Войдите на портал Azure.
В поле поиска введите пространства имен сетки событий и выберите пространства имен сетки событий из результатов.
На странице "Пространства имен сетки событий" нажмите кнопку "+ Создать" на панели инструментов.
На странице "Основы" выполните следующие действия.
Выберите подписку Azure, в которой нужно создать пространство имен.
Выберите имеющуюся группу ресурсов или создайте новую.
Введите имя для пространства имен.
Выберите регион или расположение , в котором нужно создать пространство имен.
В нижней части страницы выберите Review + create (Проверить и создать).
На вкладке "Просмотр и создание" просмотрите параметры и нажмите кнопку "Создать".
На странице "Развертывание выполнено успешно" выберите "Перейти к ресурсу", чтобы перейти к пространству имен.
Создание раздела пространства имен
Если вы не находитесь на странице пространства имен сетки событий, следуйте инструкциям по созданию, просмотру пространств имен и управлению ими, чтобы просмотреть пространство имен, которое вы хотите использовать для создания раздела.
На странице пространства имен сетки событий выберите пункт "Темы" в разделе "События" в меню слева.
На странице "Темы" нажмите кнопку "+ Раздел" на панели команд.
На странице "Создание раздела" введите имя темы, которую вы хотите создать, и нажмите кнопку "Создать".
Создание подписки на событие
Если вы находитесь на странице разделов пространства имен Сетки событий в портал Azure, выберите раздел из списка тем. Если вы находитесь на странице тем , следуйте инструкциям по созданию, просмотру и управлению разделами пространства имен, чтобы определить тему, которую вы хотите использовать для создания подписки на события.
На странице "Раздел пространства имен "События Gird" выберите пункт "Подписки" в разделе "Сущности" в меню слева.
На странице "Подписки" нажмите кнопку "+ Подписка" на панели команд.
На вкладке "Основные сведения" введите имя темы, которую вы хотите создать, и нажмите кнопку "Далее: фильтры" в нижней части страницы .
На вкладке "Фильтры" добавьте имена типов событий, которые нужно отфильтровать в подписке, и добавить фильтры атрибутов контекста, которые вы хотите использовать в подписке. Затем нажмите кнопку Далее: Дополнительные функции в нижней части страницы.
На вкладке "Дополнительные функции" можно указать хранение событий, максимальное количество доставки, длительность блокировки и параметры недоставки.
Выберите Создать, чтобы создать подписку на события.
Проверка подлинности приложения в Azure
В этом кратком руководстве показано, как подключиться к Сетка событий Azure: строка подключения.
В этом документе показано, как использовать строка подключения для подключения к пространству имен сетки событий. Если вы не знакомы с Azure, вы можете найти вариант строка подключения проще следовать.
Создание нового пространства имен Сетки событий автоматически создает начальный первичный и вторичный ключ, который каждый предоставляет полный контроль над всеми аспектами пространства имен или тем.
Клиент может использовать строка подключения для подключения к пространству имен Сетки событий. Чтобы скопировать ключи доступа для раздела пространства имен, выполните следующие действия.
- На странице пространства имен сетки событий выберите разделы.
- Выберите раздел, к который требуется получить доступ.
- На странице "Ключи доступа" нажмите кнопку копирования рядом с ключом 1 или ключом 2, чтобы скопировать ключи доступа в буфер обмена для последующего использования. Вставьте на время эти значения в Блокноте или любом другом месте.
Запуск Visual Studio
Вы можете авторизовать доступ к пространству имен Сетки событий, выполнив следующие действия.
Запустите Visual Studio. Если появится окно "Начало работы ", выберите " Продолжить без ссылки на код " в правой области.
Отправка сообщений в раздел
В этом разделе показано, как создать консольное приложение .NET для отправки сообщений в раздел "Сетка событий".
Создание консольного приложение
В Visual Studio выберите "Файл ->Создать -> Проект ".
В диалоговом окне Создать проект выполните следующие действия: (если это диалоговое окно не отображается, щелкните в меню пункт Файл, затем последовательно выберите Создать и Проект).
Выберите язык программирования C#.
Для типа приложения выберите значение Консоль.
Выберите консольное приложение из списка результатов.
Затем выберите Далее.
Введите EventSender для имени проекта, EventGridQuickStart для имени решения и нажмите кнопку "Далее".
На странице Дополнительная информация выберите Создать для создания решения и проекта.
Добавление пакетов NuGet в проект
Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
Выполните следующую команду, чтобы установить пакет NuGet Azure.Messaging.EventGrid :
Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.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; } }
Выполните сборку проекта и убедитесь, что она прошла без ошибок.
Выполните программу и дождитесь подтверждающего сообщения.
Three events have been published to the topic. Press any key to end the application.
Внимание
В большинстве случаев для распространения назначения ролей в Azure потребуется несколько минут. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure выполните следующие действия:
Извлечение сообщений из раздела
В этом разделе описано, как создать консольное приложение .NET, которое получает сообщения из раздела.
Создание проекта для получения опубликованных CloudEvents
- В окне Обозреватель решений щелкните правой кнопкой мыши решение EventGridQuickStart, наведите указатель мыши на добавление и выберите новый проект.
- Выберите Консольное приложение и нажмите Далее.
- Введите EventReceiver для имени проекта и нажмите кнопку "Создать".
- В окне Обозреватель решений щелкните правой кнопкой мыши EventReceiver и выберите "Задать в качестве запускаемого проекта".
Добавление пакетов NuGet в проект
Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
Выполните следующую команду, чтобы установить пакет NuGet Для Azure.Messaging.EventGrid . Выберите EventReceiver для проекта по умолчанию, если он еще не задан.
Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.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("-----------------");
Добавьте следующие методы в конец
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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по