基于AzureEventGrid的响应式架构探索
立即解锁
发布时间: 2025-08-25 00:50:38 阅读量: 1 订阅数: 4 


Azure开发实战:容器与无服务器服务
### 基于 Azure Event Grid 的响应式架构探索
#### 1. 引言
Azure Event Grid 是一种强大的事件路由服务,它能够将事件从发布者路由到事件处理程序。在某些架构中,Azure Blob Storage 可作为发布者,将事件转发到 Azure Functions 和 Azure Event Hub 等服务,这些位于右侧的服务即为事件处理程序。
#### 2. 支持的事件处理程序
目前支持的事件处理程序包括:
- Azure Functions
- Azure Logic Apps
- Azure Automation
- WebHooks
- Azure Queue Storage
- Hybrid Connections
- Azure Event Hubs
- Microsoft Flow
事件处理程序可被视为事件的处理器,Azure Event Grid 会根据配置将事件转发到处理程序,在那里事件将被反序列化和分析。一般来说,Azure Event Grid 在向处理程序传递事件时使用通用的事件架构,并且可以一次传递多个事件。
#### 3. 主题和订阅
- **主题(Topic)**:是一种通用的消息传递概念,允许进行一对多的通信。在 Azure Event Grid 中,你需要创建一个主题,即发布一个自定义应用程序来处理发布者与 Event Grid 端点之间的通信。主题是服务与 Azure Event Grid 之间的通道,允许前者将事件推送到 Azure 服务。
- **订阅(Subscription)**:是 Azure Event Grid 与服务之间的通道,用于从前者检索事件。
Azure Event Grid 会处理未送达消息的重试,可通过自定义策略配置重试规则。使用自定义主题时,事件必须批量发布才能正常工作。
#### 4. 通过 Azure Event Grid 连接服务
##### 4.1 在 Azure 门户中创建 Azure Event Grid
要开始使用 Azure Event Grid,请在 Azure 门户中执行以下操作:
1. 点击“+ 创建资源”,搜索“Event Grid”,从列表中选择“Event Grid 主题”,然后点击“创建”。
2. 在出现的简单表单中,输入服务实例的名称。
3. 点击“创建”并等待片刻,服务实例将被创建。创建完成后,可访问资源查看空实例。
在“概述”刀片中,除了创建订阅的选项外,还有一个重要的“主题终结点”,用于从自定义主题发布事件。此外,“访问密钥”刀片包含两个可用于授权访问 Azure Event Grid 的密钥。
##### 4.2 创建主题和订阅
尝试使用以下 PowerShell 代码创建一个带有订阅的主题:
```powershell
$myEndpoint = "<my-endpoint>"
Set-AzureRmContext -Subscription "<subcription-name>"
New-AzureRmEventGridSubscription `
-Endpoint $myEndpoint `
-EventSubscriptionName "<event-subscription-name>"
-ResourceGroupName "<rg-name>"
```
执行此代码时,可能会出现错误,提示端点未通过验证。
#### 5. Azure Event Grid 安全性
除了访问令牌,Azure Event Grid 还会检查端点是否有效和安全。以下处理程序类型无需进行此验证:
- Azure Logic Apps
- Azure Automation
- 使用 EventGridTrigger 的 Azure Functions
其他端点(尤其是由 HTTP 请求触发的端点)必须经过验证才能使用。验证过程如下:
1. 向端点发送包含多个字段(如主题、验证代码等)的 SubscriptionValidationEvent,同时发送特殊的 `aeg-event-type: SubscriptionValidation` 标头。
2. Event Grid 期望收到包含请求中发送的验证代码的成功响应。
以下是一个验证事件的示例:
```json
[{
"id": "3d178aaf-364c-67b-bq0c-e34519da4eww",
"topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"subject": "",
"data": {
"validationCode": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6",
"validationUrl": "<validation-url>"
},
"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
"eventTime": "2018-08-10T10:20:19.4556811Z",
"metadataVersion": "1",
"dataVersion": "1"
}]
```
要验证端点,需返回以下响应:
```json
{
"validationResponse": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6"
}
```
#### 6. 创建订阅
##### 6.1 编写验证函数
为了进行端点验证,创建一个由 HTTP 请求触发的函数:
```csharp
#r "Newtonsoft.Json"
using System.Net;
using Newtonsoft.Json;
public static async Task<HttpResponseMessage>
Run(HttpRequestMessage req, TraceWriter log)
{
var @event = JsonConvert.DeserializeObject(await
req.Content.ReadAsStringAsync());
log.Info(@event.ToString());
return req.CreateResponse(HttpStatusCode.OK);
}
```
根据工具集版本,负载中可能包含 `validationUrl` 值。若要利用此功能,需安装 Azure CLI 2.0 的 Event Grid 扩展。若不使用该功能,需修改函数代码:
```csharp
#r "Newtonsoft.Json"
using System.Net;
using Newtonsoft.Json;
public static async Task<HttpResponseM
```
0
0
复制全文
相关推荐








