Azure 事件网格是针对云的事件路由服务。 Azure Functions 是受支持的事件处理程序之一。
在此快速入门中,将使用 Azure 门户创建一个自定义主题,然后订阅该自定义主题,再触发可查看结果的事件。 将事件发送至 Azure 函数。
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
在本部分中,使用 Visual Studio Code 通过事件网格触发器创建函数。
打开 Visual Studio Code。
在左侧栏中,选择“Azure”。
在左窗格中的“工作区”部分中,选择命令栏上的“Azure Functions”按钮,然后选择“创建函数”。
选择要在其中保存函数代码的文件夹。
对于“新建项目”命令,对于“语言”,选择“C#”,然后选择 Enter 键。
对于“.NET 运行时”,选择“.NET 8.0 独立 LTS”,然后选择 Enter 键。
对于“函数的模板”,选择“Azure 事件网格触发器”,然后选择 Enter 键。
对于“函数名称”,输入函数的名称,然后选择 Enter 键。
对于“命名空间”,输入函数的命名空间的名称,然后选择 Enter 键。
在当前窗口或新窗口中打开项目,或将其添加到工作区。
等待函数创建完毕。 函数创建的状态显示在右下角。
查看 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”按钮。
在命令面板的下拉列表中,选择“+ 新建函数应用”,然后选择 Enter 键。
对于“名称”,请输入新函数应用的全局唯一名称,然后选择 Enter 键。
对于“运行时堆栈”,请选择“.NET 8 (独立)”。
对于 Azure 资源的“位置”,请选择离你近的区域。
函数应用创建的状态显示在底部窗格的“AZURE”选项卡上。 创建函数应用后,可看到将本地创建的函数部署到函数应用的状态。
部署成功后,展开“创建函数应用成功”消息,然后选择“单击以查看资源”。 确认函数已在左侧窗格的“资源”部分选中。
右键单击函数,然后选择“在门户中打开”。
如有必要,请登录到 Azure,并确认显示针对你的函数的“函数应用”页面。
在底部窗格中,选择你的函数。
切换到“日志”选项卡。保持此选项卡的打开状态,以便在本教程稍后部分向事件网格主题发送事件时查看记录的消息。
事件网格主题提供用户定义的终结点,可向其发布事件。
在 Web 浏览器窗口的新选项卡上,登录到 Azure 门户。
在主题的搜索栏中,搜索“事件网格主题”,然后选择“事件网格主题”。
在“主题”页面上,选择命令栏上的“+ 创建”。
在“创建主题”窗格上执行以下步骤:
对于“订阅”,请选择你的 Azure 订阅。
对于“资源组”,选择与前面的步骤一致的资源组。
对于“名称”,为自定义主题提供唯一的名称。 主题名称必须唯一,因为域名系统 (DNS) 条目表示它。
请不要使用示例图像中所示的名称。 应创建自己的名称。 它必须为 3-50 个字符,并且仅包含值 a-z、A-Z、0-9 和连字符 (
-
)。对于“区域”,选择事件网格主题的位置。
选择“查看 + 创建”。
在“审阅 + 创建”选项卡上查看设置,然后选择“创建”。
创建自定义主题后,选择“转到资源”链接以打开该主题的“事件网格主题”页面。
订阅事件网格主题,以告知事件网格你要跟踪哪些事件,以及要将事件发送到何处。
在自定义主题的“事件网格主题”页上的工具栏中,选择“+ 事件订阅”。
在“创建事件订阅”窗格上执行以下步骤:
对于“名称”,输入事件订阅的名称。
对于“事件架构”,请选择“云事件架构 v1.0”。
对于“终结点类型”,请选择“Azure Function” 。
选择“配置终结点”。
在“选择 Azure 函数”窗格上执行以下步骤:
对于“订阅”,选择具有该函数的 Azure 订阅。
对于“资源组”,选择具有该函数的资源组。
对于“函数应用”,选择你的函数应用。
对于“函数”,选择函数应用中的函数。
选择“确认所选内容” 。
此步骤是可选的,但我们建议将其用于生产方案。 在“创建事件订阅”窗格上,转到“附加功能”选项卡,并设置“每批最大事件数”和“首选批大小(KB)”的值。
批处理可提高吞吐量。 对于“每批最大事件数”,请设置订阅要在一个批中包含的事件的最大数目。 首选批大小(以 KB 为单位)设置批大小的首选上限,但如果单个事件大于此阈值,则可以超出此上限。
在“创建事件订阅”窗格上,选择“创建”。
现在,触发一个事件,看看事件网格如何将消息分发到终结点。 使用 Azure CLI 或 Azure PowerShell 向自定义主题发送测试性事件。 通常情况下,应用程序或 Azure 服务会发送事件数据。
第一个示例使用 Azure CLI。 它获取自定义主题的 URL 和密钥,以及示例事件数据。 将自定义主题名称用于 topicname
。 它将创建示例事件数据。
JSON 的 data
元素是事件的有效负载。 可以将任何格式正确的 JSON 置于此字段中。 也可将主题字段用于高级路由和筛选。
cURL 工具发送 HTTP 请求。 本文使用 cURL 向自定义主题发送事件。
设置在命令中使用的
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,执行的步骤类似。
设置以下变量。 复制并粘贴每个命令后,更新主题名称和资源组名称,然后运行该命令。
$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-WebRequest
cmdlet 发送事件:Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
确认函数中的消息显示在 Azure 门户中函数的“日志”选项卡上。
你已触发事件,而事件网格则已将消息发送到你在订阅时配置的终结点。 现在,你可以检查函数是否收到了它。
如果打算继续处理此事件,请不要清除本文中创建的资源。 否则,请删除本文中创建的资源。
在左侧菜单上,选择“资源组”。
另一种方法是在左侧菜单中选择“所有服务”,然后选择“资源组”。
选择资源组,打开其详细信息窗格。
在工具栏中,选择“删除资源组”。
输入资源组的名称以确认删除,然后选择“删除”。
了解如何创建主题和事件订阅以后,即可进一步学习事件网格的功能:
若要了解如何使用各种编程语言将事件发布到事件网格以及如何在事件网格中使用事件,请查看以下示例: