在这个快速入门中,你需要在 Visual Studio Code 中创建一个带有事件网格触发器的函数,在 Azure 门户中创建一个事件网格主题和事件订阅,然后发送一个测试事件,看看事件网格如何将自定义事件路由到你的 Azure 函数。
Azure 事件网格 是一款面向云端的事件路由服务,将事件从源头传递给处理程序。 Azure Functions 是其支持的事件处理程序之一。 通过连接两者,你可以自动响应事件运行代码,无需轮询变更或管理基础设施。
如果您没有 Azure 试用订阅,请在开始之前创建 试用订阅。
先决条件
- 已在某个支持的平台上安装 Visual Studio Code。
- Azure Functions extension for Visual Studio Code.
- .NET 8.0 SDK 或更高版本,扩展用来构建和部署 C# 函数。
使用 Visual Studio Code 通过事件网格触发器创建函数
在本部分中,使用 Visual Studio Code 通过事件网格触发器创建函数。
创建函数
打开 Visual Studio Code。
在左侧栏中,选择“Azure”。
在左窗格中的 “工作区 ”部分,选择命令栏上的 Azure Functions 。 然后选择“ 创建函数”。
选择要在其中保存函数代码的文件夹。
对于 “创建新项目 ”命令,对于 “语言”,请选择 “C#”。 选择 输入。
对于 .NET 运行时,请选择 .NET 8.0 独立 LTS,然后选择 Enter。
对于 函数的模板,请选择 Azure 事件网格触发器。 选择 输入。
对于 函数名称,请输入函数的名称。 选择 输入。
对于 命名空间,请输入函数命名空间的名称。 选择 输入。
在当前窗口或新窗口中打开项目,或将其添加到工作区。
等待函数创建完毕。 函数创建的状态显示在右下角。
查看 YourFunctionName.cs 文件中的代码,特别是 方法。
Run它使用记录器打印信息。[Function(nameof(MyEventGridTriggerFunc))] public void Run([EventGridTrigger] CloudEvent cloudEvent) { _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject); }
将函数部署到 Azure
如果“Azure”窗格尚未打开,请选择左侧栏中的“Azure”按钮。
将鼠标悬停在项目上,然后选择“部署到 Azure”按钮。
在命令面板的下拉列表中,选择“ + 创建新函数应用”,然后选择 Enter。
对于 Name,请输入新函数应用的全局唯一名称。 选择 输入。
对于运行时堆栈,请选择.NET 8 独立。
对于 Azure 资源的“位置”,请选择离你近的区域。
函数应用创建的状态显示在底部窗格的“AZURE”选项卡上。 创建函数应用后,可看到将本地创建的函数部署到函数应用的状态。
部署成功后,展开 “创建函数应用”成功 消息。 选择 “单击”以查看资源。 确认您的函数已在左侧窗格的 RESOURCES 部分中被选中。
右键单击你的函数,然后选择 “在门户中打开”。
如有必要,请登录到 Azure,并确认显示针对你的函数的“函数应用”页面。
在底部窗格中,选择你的函数。
切换到“ 日志 ”选项卡。将此选项卡保持打开状态,以便在将事件发送到本文后面的事件网格主题时,可以看到记录的消息。
创建事件网格自定义主题
事件网格主题提供用户定义的终结点,可向其发布事件。
在 Web 浏览器窗口的新选项卡上,登录到 Azure 门户。
在顶部的搜索栏中,搜索“ 事件网格主题”,然后选择 事件网格主题。
在“主题”页面上,选择命令栏上的+ 创建。
在“创建主题”窗格上执行以下步骤:
在订阅中,选择你的 Azure 订阅。
对于“资源组”,选择与前面的步骤一致的资源组。
对于名称,请为自定义主题提供一个唯一的名称。 主题名称必须唯一,因为域名系统 (DNS) 条目表示它。
请不要使用示例图像中所示的名称。 请自己创建一个名称。 它必须为 3-50 个字符,并且仅包含值 a-z、A-Z、0-9 和连字符 (
-)。对于“区域”,选择事件网格主题的位置。
选择 查看 + 创建。
在“审阅 + 创建”选项卡上查看设置,然后选择“创建”。
创建自定义主题后,选择转到资源以打开该事件网格主题页。
订阅事件网格自定义主题
订阅事件网格主题,以告知事件网格你要跟踪哪些事件,以及要将事件发送到何处。
在自定义主题的“事件网格主题”页上的工具栏中,选择“+ 事件订阅”。
在“创建事件订阅”窗格上执行以下步骤:
对于名称,输入事件订阅的名称。
对于“事件架构”,请选择“云事件架构 v1.0”。
对于终结点类型,请选择Azure Function。
选择 配置终结点。
在“选择 Azure 函数”窗格上执行以下步骤:
对于订阅,请选择包含该函数的 Azure 订阅。
对于“资源组”,选择具有该函数的资源组。
对于函数应用,请选择你的函数应用。
对于 Function,请选择函数应用中的函数。
选择确认选择。
此步骤是可选的,但我们建议将其用于生产方案。 在“创建事件订阅”窗格上,转到“附加功能”选项卡,并设置“每批最大事件数”和“首选批大小(KB)”的值。
批处理可提高吞吐量。 对于 每个批处理的最大事件数,请设置订阅在批处理中包含的最大事件数。 首选批大小(以 KB 为单位)设置批大小的首选上限,但如果单个事件大于此阈值,则可以超出此上限。
在“创建事件订阅”窗格上,选择“创建”。
向事件网格主题发送测试事件
现在,触发一个事件,看看事件网格如何将消息分发到终结点。 使用 Azure CLI 或 Azure PowerShell 向自定义主题发送测试性事件。 通常,应用程序或 Azure 服务会发送事件数据。
第一个示例使用 Azure CLI。 它获取自定义主题的 URL 和密钥,以及示例事件数据。 将自定义主题名称用于 topicname。 它将创建示例事件数据。
JSON 的 data 元素是事件的有效负载。 可以将任何格式正确的 JSON 置于此字段中。 也可将主题字段用于高级路由和筛选。
cURL 工具发送 HTTP 请求。 本文使用 cURL 向自定义主题发送事件。
Azure CLI
设置在命令中使用的
topicname和resourcegroupname变量。将
TOPICNAME替换为事件网格主题的名称。topicname="TOPICNAME"将
RESOURCEGROUPNAME替换为包含事件网格主题的 Azure 资源组的名称。resourcegroupname="RESOURCEGROUPNAME"使用以下命令获取主题的终结点。 复制并粘贴该命令后,更新主题名称和资源组名称,然后运行该命令。
endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)使用以下命令以获取自定义主题的密钥。 复制并粘贴该命令后,更新主题名称和资源组名称,然后运行该命令。
key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)使用事件定义复制以下语句,然后选择 Enter。
event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'运行以下 cURL 命令以发布事件:
curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint确认来自你的函数的消息显示在 Azure 门户中该函数的日志选项卡上。
Azure PowerShell
第二个示例使用 Azure PowerShell,执行的步骤类似。
设置以下变量。 复制并粘贴每个命令后,更新主题名称和资源组名称,然后运行该命令。
$resourceGroupName = "RESOURCEGROUPNAME"$topicName = "TOPICNAME"运行以下命令以获取主题的终结点和密钥:
$endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName准备活动。 在 PowerShell 窗口中复制并运行这些语句:
$eventID = Get-Random 99999 #Date format should be SortableDateTimePattern (ISO 8601) $eventDate = Get-Date -Format s #Construct the body by using a hash table $htbody = @{ id= $eventID eventType="recordInserted" subject="myapp/vehicles/motorcycles" eventTime= $eventDate data= @{ make="Ducati" model="Monster" } dataVersion="1.0" } #Use ConvertTo-Json to convert the event body from a hash table to a JSON object #Append square brackets to the converted JSON payload because they're expected in the event's JSON payload syntax $body = "["+(ConvertTo-Json $htbody)+"]"使用
Invoke-WebRequestcmdlet 发送事件:Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}确认来自该函数的消息显示在 Azure 门户中该函数的日志选项卡上。
验证函数是否已收到事件
你已触发事件,而事件网格则已将消息发送到你在订阅时配置的终结点。 现在,你可以检查函数是否收到了它。
清理资源
如果打算继续处理此事件,请不要清除本文中创建的资源。 否则,请删除本文中创建的资源。
在 Azure 门户搜索框中,输入 资源组 ,然后选择 资源组。
选择资源组,打开其详细信息窗格。
在工具栏中,选择“删除资源组”。
输入资源组的名称以确认删除,然后选择“删除”。
相关内容
了解如何创建主题和事件订阅以后,即可进一步学习事件网格的功能:
若要了解如何使用各种编程语言将事件发布到事件网格以及如何在事件网格中使用事件,请查看以下示例: