实验室 09:发布和订阅事件网格事件

Microsoft Azure 用户接口

鉴于 Microsoft 云工具的动态特性,Azure UI 在此培训内容开发后可能会发生更改。 因此,实验说明和实验步骤可能无法正确对应。

我们发现社区进行了必要更改时,Microsoft 会更新此培训课程。 但是,云更新经常发生,因此在此培训内容更新之前,可能会发生 UI 更改。 如果发生这种情况,请适应这些更改,并根据需要在实验室中熟悉这些更改。

Instructions

开始之前

登录到实验室环境

使用以下凭据登录到 Windows 11 虚拟机 (VM):

  • 用户名:Admin
  • 密码:Pa55w.rd

注意:你的讲师将提供连接到虚拟实验室环境的说明。

查看已安装的应用程序

在 Windows 11 桌面上找到任务栏。 任务栏里有本实验室中你将使用的应用程序的图标,包括:

  • Microsoft Edge
  • Microsoft Visual Studio Code

实验室场景

在本实验室中,你将从一个概念证明 Web 应用开始,该应用托管在容器中,将用于订阅事件网格。 通过此应用,你可提交事件并接收指示事件成功的确认消息。

体系结构关系图

描述用户发布和订阅事件网格事件的体系结构关系图。

练习 1:创建 Azure 资源

任务 1:打开 Azure 门户

  1. 在任务栏上,选择 Microsoft Edge 图标。

  2. 在打开的浏览器窗口中,浏览到 Azure 门户 (https://portal.azure.com),然后使用你将用于此实验室的帐户登录。

    注意:第一次登录 Azure 门户时,你会看到一个门户教程。 选择“开始使用”,以跳过导览并开始使用门户。

任务 2:打开 Azure Cloud Shell

  1. 在 Azure 门户中,选择“Cloud Shell”图标 Cloud Shell 图标 打开 Cloud Shell**。 如果 Cloud Shell 默认为 PowerShell 会话,请在“Cloud Shell”菜单中选择“切换到 Bash”,然后选择“确认”****

    注意:“Cloud Shell”图标使用大于符号 (>) 和下划线字符 (_) 表示。

    如果这是首次启动 Cloud Shell,将看到“入门”提示。 选择“不需要存储帐户”,然后选择“应用”。

  2. 在 Azure 门户中,在 Cloud Shell 命令提示符下输入以下命令,以获取 Azure 命令行接口 (Azure CLI) 工具的版本:

     az --version
    

任务 3:查看 Microsoft.EventGrid 提供程序注册

  1. 在“Cloud Shell”窗格中,运行以下命令,以检查是否已注册资源提供程序“Microsoft.EventGrid”:

     az provider show --namespace Microsoft.EventGrid --query "registrationState"
    
  2. 请注意,已注册 Microsoft.EventGrid 提供程序**

  3. 关闭 Cloud Shell 窗格。

任务 4:创建自定义事件网格主题

  1. 在 Azure 门户的导航窗格上,选择“创建资源”。

  2. 在“创建资源”窗格的“搜索服务和市场”文本框中,输入“事件网格主题” ,然后按 Enter 键。

  3. 在“市场”搜索结果边栏选项卡上,选择“事件网格主题”结果,然后选择“创建” 。

  4. 在“创建主题”边栏选项卡的“基本”选项卡上,执行以下操作,然后选择“高级”选项卡 :

    设置 操作
    “订阅”下拉列表 保留默认值
    资源组”下拉列表 选择“新建”,输入“PubSubEvents”,然后选择“确定”
    “名称”文本框 输入“hrtopic [yourname]”
    “区域”下拉列表 选择“美国东部”

    以下屏幕截图显示了“基本”选项卡上的配置设置。

    显示“创建主题”边栏选项卡上配置设置的屏幕截图

  5. 在“高级”选项卡的“事件架构”下拉列表中,确保已选择“事件网格架构”条目,然后选择“查看 + 创建”******

  6. 在“查看 + 创建”选项卡中,查看在上述步骤中选择的选项。

  7. 选择“创建”以使用指定配置创建事件网格主题。

    注意:等待 Azure 完成创建主题,再继续本实验室操作。 创建主题时会收到通知。

任务 5:将 Azure 事件网格查看器部署到 Web 应用

  1. 在 Azure 门户的导航窗格上,选择“创建资源”。

  2. 在“创建资源”窗格的“搜索服务和市场”文本框中,输入“Web 应用” ,然后按 Enter 键。

  3. 在“市场”搜索结果边栏选项卡上,选择“Web 应用”结果,然后选择“创建” 。

  4. 在“创建 Web 应用”边栏选项卡的“基本”选项卡上,执行以下操作,然后选择“容器”选项卡:

    设置 操作
    “订阅”下拉列表 保留默认值
    资源组”下拉列表 选择列表中的“PubSubEvents”
    “名称”文本框  输入“eventviewer[yourname]”
    “发布”部分 选择“容器”**
    “操作系统”部分 选择“Linux”
    “区域”下拉列表 选择“美国东部”
    “Linux 计划(美国东部)”部分 选择“新建”,在“名称”文本框中输入“EventPlan”,然后选择“确定”
    “定价计划”部分 保留默认值

    以下屏幕截图显示了“创建 Web 应用”窗格上配置的设置。

    显示“创建 Web 应用”窗格上配置的设置的屏幕截图

  5. 在“容器”选项卡上,执行以下操作,然后选择“查看 + 创建”:

    设置 操作
    映像源 选择“其他容器注册表
    访问类型 选择“公共”
    注册表服务器 URL** https://index.docker.io
    映像和标记** 输入 microsoftlearning/azure-event-grid-viewer:latest

    以下屏幕截图显示了“Docker”选项卡上配置的设置。

    显示“创建 Web 应用 - Docker”选项卡上配置的设置的屏幕截图

  6. 在“查看 + 创建”选项卡中,查看在上述步骤中选择的选项。

  7. 选择“创建”,使用指定的配置创建 Web 应用。

    注意:等待 Azure 完成 Web 应用的创建后再继续本实验室。 会在应用创建完毕后收到通知。

审阅

在本练习中,你创建了在本实验剩余时间里将用到的“事件网格主题”和“Web 应用”。

练习 2:创建事件网格订阅

任务 1:访问事件网格查看器 Web 应用程序

  1. 在 Azure 门户的导航窗格中,选择“资源组”。

  2. 在“资源组”边栏选项卡上,选择“PubSubEvents”资源组 。

  3. 在“PubSubEvents”边栏选项卡上,选择 eventviewer _[yourname] Web 应用,你将看到“概述”部分。 _

  4. 在“概述”部分,记录“基本信息”窗格下默认域的值。 你将在稍后的实验室中使用此值。

  5. 当仍然在“概述”部分中时,单击“浏览”按钮。

  6. 查看当前运行的“Azure 事件网格查看器”Web 应用程序。 在接下来的实验室中,请保持 Web 应用程序的运行状态。

    注意:此 Web 应用程序将在事件发送到其终结点时实时更新。 你将使用此应用程序在整个实验室中监视事件。

  7. 返回显示 Azure 门户的当前打开的浏览器窗口。

任务 2:创建新订阅

  1. 在 Azure 门户的导航窗格中,选择“资源组”。

  2. 在“资源组””边栏选项卡中,选择之前在本实验室中创建的“PubSubEvents”资源组 。

  3. 在“PubSubEvents”边栏选项卡上,选择你之前在本实验室中创建的 hrtopic [yourname] 事件网格主题 。

  4. 在“事件网格主题”边栏选项卡,选择“+ 事件订阅” 。

  5. 在“创建事件订阅”边栏选项卡中,执行以下操作,然后选择“创建” :

    设置 操作
    “名称”文本框  输入“basicsub”
    “事件架构”下拉列表 选择“事件网格架构”
    “终结点类型”下拉列表 选择“Web Hook”
    终结点 选择“配置终结点”**。 在“订阅服务器终结点”文本框中,输入之前记录的 Web 应用 URL 值,确保它使用 https:// 前缀,添加后缀 /api/updates,然后选择“确认选择” 。 例如,如果 Web 应用 URL 值为 http://eventviewerstudent.azurewebsites.net/,则订阅服务器终结点为 https://eventviewerstudent.azurewebsites.net/api/updates

    以下屏幕截图显示了“创建事件订阅”边栏选项卡上配置的设置。

    显示“创建事件订阅”边栏选项卡上已配置设置的屏幕截图

    注意:等待 Azure 完成创建订阅再继续本实验室操作。 创建订阅时会收到通知。

任务 3:观察订阅验证事件

  1. 返回该浏览器窗口,其中显示“Azure 事件网格查看器”Web 应用程序。

  2. 查看在订阅创建过程中创建的 Microsoft.EventGrid.SubscriptionValidationEvent 事件。

  3. 选择事件并查看其 JSON 内容。

  4. 返回到当前打开显示 Azure 门户的浏览器窗口。

任务 4:记录订阅凭据

  1. 在 Azure 门户的导航窗格中,选择“资源组”。

  2. 在“资源组””边栏选项卡中,选择之前在本实验室中创建的“PubSubEvents”资源组 。

  3. 在“PubSubEvents”边栏选项卡上,选择你之前在本实验室中创建的 hrtopic [yourname] 事件网格主题 。

  4. 在“事件网格主题”边栏选项卡中,记录“主题终结点”字段的值 。 你将在稍后的实验室中使用此值。

  5. 在“设置”类别中,选择“访问密钥”链接 。

  6. 在“访问密钥”部分,记录“密钥 1”文本框的值 。 你将在稍后的实验室中使用此值。

审阅

在本练习中,你创建了一个新的订阅并进行了注册验证,然后记录了将新事件发布到该主题所需的凭据。

练习 3:在 .NET 上发布事件网格事件

任务 1:创建 .NET 项目

  1. 在“启动”屏幕上,选择“Visual Studio Code”磁贴 。

  2. 在“文件”** 菜单中,选择“打开文件夹”**。

  3. 在打开的文件资源管理器窗口中,浏览到 Allfiles (F):\Allfiles\Labs\09\Starter\EventPublisher,然后选择“选择文件夹” 。

  4. 在“Visual Studio Code”窗口的顶部菜单栏中,转到“终端”菜单,然后选择“新建终端” 。

  5. 运行以下命令,在当前文件夹中创建一个名为 EventPublisher 的新 .NET 项目:

     dotnet new console --framework net8.0 --name EventPublisher --output . 
    

    注意:dotnet new 命令将在与项目同名的文件夹中创建一个新的“控制台”项目 。

  6. 运行以下命令,从 NuGet 导入 Azure.Messaging.EventGrid 版本 4.11.0:

     dotnet add package Azure.Messaging.EventGrid --version 4.11.0
    

    注意:dotnet add package 命令将从 NuGet 添加 Microsoft.Azure.EventGrid 包 。 有关详细信息,请转到 Azure.Messaging.EventGrid

  7. 运行以下命令来构建 .NET Web 应用程序:

     dotnet build
    
  8. 选择“终止终端”或者“回收站”图标以关闭当前打开的终端和所有关联的进程 。

任务 2:修改 Program 类以连接到事件网格

  1. 在“Visual Studio Code”窗口的“资源管理器”窗格上,打开 Program.cs 文件。 **  

  2. 在 Program.cs 文件的“代码编辑器”选项卡上,删除现有文件中的所有代码。 **  

  3. 添加以下代码:

     using Azure;
     using Azure.Messaging.EventGrid;
     using System;
     using System.Threading.Tasks;    
     public class Program
     {
         private const string topicEndpoint = "<topic-endpoint>";
         /* Update the topicEndpoint string constant by setting its value to the Topic
            Endpoint of the Event Grid topic that you recorded previously in this lab. */
         private const string topicKey = "<topic-key>";
         /* Update the topicKey string constant by setting its value to the Key of the Event Grid topic that you recorded previously in this lab. */     
         public static async Task Main(string[] args)
         {
             //Add Main code here
         }
     }
    
  4. 在第 7 行中,将 <topic-endpoint> 占位符替换为在本实验室前面记录的事件网格主题终结点的值。

  5. 在第 10 行中,将 <topic-key> 占位符替换为在本实验室前面记录的事件网格主题访问密钥的值。

任务 3:发布新事件

  1. 将 Program.cs 文件的 Main 方法替换为以下代码:****

     public static async Task Main(string[] args)
     {   
         /* To create a new variable named "endpoint" of type "Uri", 
            using the "topicEndpoint" string constant as a constructor parameter */
         Uri endpoint = new Uri(topicEndpoint);
    
         /* To create a new variable named "credential" of type "AzureKeyCredential",
            use the "topicKey" string constant as a constructor parameter. */
         AzureKeyCredential credential = new AzureKeyCredential(topicKey);
    
         /* To create a new variable named "client" of type "EventGridPublisherClient", 
            using the "endpoint" and "credential" variables as constructor parameters */
         EventGridPublisherClient client = new EventGridPublisherClient(endpoint, credential);
    
         /* To create a new variable named "firstEvent" of type "EventGridEvent",
            and populate that variable with sample data */        
         EventGridEvent firstEvent = new EventGridEvent(
             subject: $"New Employee: Alba Sutton",
             eventType: "Employees.Registration.New",
             dataVersion: "1.0",
             data: new
             {
                 FullName = "Alba Sutton",
                 Address = "4567 Pine Avenue, Edison, WA 97202"
             }
         );
    
         /* To create a new variable named "secondEvent" of type "EventGridEvent",
            and populate that variable with sample data */
         EventGridEvent secondEvent = new EventGridEvent(
             subject: $"New Employee: Alexandre Doyon",
             eventType: "Employees.Registration.New",
             dataVersion: "1.0",
             data: new
             {
                 FullName = "Alexandre Doyon",
                 Address = "456 College Street, Bow, WA 98107"
             }
         );
    
         /* To asynchronously invoke the "EventGridPublisherClient.SendEventAsync"
            method using the "firstEvent" variable as a parameter */
         await client.SendEventAsync(firstEvent);
         Console.WriteLine("First event published");
    
         /* To asynchronously invoke the "EventGridPublisherClient.SendEventAsync"
            method using the "secondEvent" variable as a parameter */
         await client.SendEventAsync(secondEvent);
         Console.WriteLine("Second event published");
     }
    

    备注:要了解有关 AzureKeyCredential 的详细信息

    备注:要了解有关事件网格的详细信息,请单击以下链接:

  2. 保存 Program.cs 文件。 **

  3. 在“Visual Studio Code”窗口中的“菜单”栏上,选择“终端”,然后选择“新建终端” 。

  4. 运行以下命令来运行 .NET Web 应用程序:

     dotnet run
    

    注意:如果有任何生成错误,请查看 Allfiles (F):\Allfiles\Labs\09\Solution\EventPublisher 文件夹中的 Program.cs 文件 。

  5. 观察从当前正在运行的控制台应用程序中输出的成功消息。

  6. 选择“终止终端”或者“回收站”图标以关闭当前打开的终端和所有关联的进程 。

任务 4:查看发布的事件

  1. 使用“Azure 事件网格查看器”Web 应用程序返回到浏览器窗口。

  2. 查看由控制台应用程序创建的 Employees.Registration.New 事件。

  3. 选择任何事件并查看其 JSON 内容。

  4. 返回到 Azure 门户。

审阅

在本练习中,你使用了 .NET 控制台应用程序将新事件发布到事件网格主题上。