Azure 应用配置事件使应用程序能够响应键值的变化。 无需复杂的代码或成本高昂且效率低下的轮询服务即可完成此作。 相反,事件会通过 Azure 事件网格 推送到订阅者,例如 Azure Functions、 Azure 逻辑应用,甚至推送到你自己的自定义 HTTP 侦听器。 关键在于,您只需为实际使用的部分付费。
Azure 应用配置事件将发送到 Azure 事件网格,该网格通过丰富的重试策略和死信传递向应用程序提供可靠的传递服务。 有关详细信息,请参阅事件网格消息传递和重试。
常见的应用配置事件方案包括刷新应用程序配置、触发部署或任何面向配置的工作流。 如果更改不频繁,但方案需要即时响应,基于事件的体系结构可能会特别高效。
有关快速示例,请查看 使用事件网格获取数据更改通知 。
可用事件类型
事件网格使用事件订阅将事件消息路由到订阅者。 Azure 应用配置发出以下事件类型:
| 事件类型 | Description |
|---|---|
| Microsoft.AppConfiguration.KeyValueModified | 创建或替换键值时引发。 |
| Microsoft.AppConfiguration.KeyValueDeleted | 删除键值时引发。 |
| Microsoft.AppConfiguration.SnapshotCreated | 在创建快照时触发。 |
| Microsoft.AppConfiguration.SnapshotModified | 在快照被修改时引发。 |
事件架构
一个事件包含以下顶层数据:
| 资产 | 类型 | Description |
|---|---|---|
source |
字符串 | 事件源的完整资源路径。 此字段不可写入。 事件网格提供此值。 |
subject |
字符串 | 由发布者定义的指向事件主题的路径。 |
type |
字符串 | 该事件源的其中一种注册事件类型。 |
time |
字符串 | 事件生成的时间是基于提供者的 UTC 时间。 |
id |
字符串 | 事件的唯一标识符。 |
data |
对象 | 应用配置事件数据。 |
specversion |
字符串 | CloudEvents 架构规范版本。 |
数据对象具有以下属性:
键值事件
| 资产 | 类型 | Description |
|---|---|---|
key |
字符串 | 已修改或删除的键值键。 |
label |
字符串 | 已修改或删除的键值的标签(如果有)。 |
etag |
字符串 | 对于 KeyValueModified 新键值的 etag。 对于 KeyValueDeleted,表示已删除键值的 etag。 |
syncToken |
字符串 | 表示键值事件后服务器状态的同步令牌。 |
快照事件
| 资产 | 类型 | Description |
|---|---|---|
name |
字符串 | 已创建或修改的快照的名称。 |
etag |
字符串 | 对于 SnapshotCreated 新快照的 etag。 对于 SnapshotModified,这是已修改快照的 ETag。 |
syncToken |
字符串 | 表示快照事件后服务器状态的同步令牌。 |
示例事件
以下示例显示了关键值修改事件的模式架构:
[{
"id": "84e17ea4-66db-4b54-8050-df8f7763f87b",
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/microsoft.appconfiguration/configurationstores/contoso",
"subject": "https://contoso.azconfig.io/kv/Foo?label=FizzBuzz",
"data": {
"key": "Foo",
"label": "FizzBuzz",
"etag": "FnUExLaj2moIi4tJX9AXn9sakm0"
},
"type": "Microsoft.AppConfiguration.KeyValueModified",
"time": "2019-05-31T20:05:03Z",
"specversion": "1.0"
}]
以下示例显示了键值删除事件的架构:
[{
"id": "84e17ea4-66db-4b54-8050-df8f7763f87b",
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/microsoft.appconfiguration/configurationstores/contoso",
"subject": "https://contoso.azconfig.io/kv/Foo?label=FizzBuzz",
"data": {
"key": "Foo",
"label": "FizzBuzz",
"etag": "FnUExLaj2moIi4tJX9AXn9sakm0"
},
"type": "Microsoft.AppConfiguration.KeyValueDeleted",
"time": "2019-05-31T20:05:03Z",
"specversion": "1.0"
}]
以下示例显示了快照创建事件的架构:
[{
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/microsoft.appconfiguration/configurationstores/contoso",
"subject": "https://contoso.azconfig.io/kvsnapshots/Foo",
"type": "Microsoft.AppConfiguration.SnapshotCreated",
"time": "2023-09-02T20:05:03.0000000Z",
"id": "84e17ea4-66db-4b54-8050-df8f7763f87b",
"data": {
"name": "Foo",
"etag": "FnUExLaj2moIi4tJX9AXn9sakm0",
"syncToken": "zAJw6V16=Njo1IzUxNjQ2NzM=;sn=5164673"
},
"specversion": "1.0"
}]
以下示例显示了快照修改事件的架构:
[{
"source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/microsoft.appconfiguration/configurationstores/contoso",
"subject": "https://contoso.azconfig.io/snapshots/Foo",
"type": "Microsoft.AppConfiguration.SnapshotModified",
"time": "2023-09-03T20:05:03.0000000Z",
"id": "84e17ea4-66db-4b54-8050-df8f7763f87b",
"data": {
"name": "Foo",
"etag": "FnUExLaj2moIi4tJX9AXn9sakm0",
"syncToken": "zAJw6V16=Njo1IzUxNjQ2NzM=;sn=5164673"
},
"specversion": "1.0"
}]
有关详细信息,请参阅 Azure 应用配置事件架构。
消费事件的实践
处理应用配置事件的应用程序应遵循以下建议的做法:
- 可以将多个订阅配置为将事件路由到同一事件处理程序,因此不要假定事件来自特定源。 相反,请检查消息的主题,以确保应用配置实例正在发送事件。
- 检查
eventType,并且不要假设你收到的所有事件都会是你预期的类型。 - 使用
etag字段来了解你掌握的对象信息是否仍为最新。 - 使用 sequencer 字段了解任何特定对象上的事件顺序。
- 使用主题字段访问修改的键值。
后续步骤
若要详细了解事件网格并尝试 Azure 应用配置事件,请参阅: