事件网格
事件网格是一种事件总线服务,支持使用了不同技术栈的分布式架构,支持接入多种类型的事件源和事件目标,并提供事件过滤、路由的能力。
一、技术特性
- CloudEvents:事件格式遵循CloudEvents标准,使用标准的字段来标识事件。
- 通信协议:事件网格可以使用 TCP、HTTP 或 gRPC 与客户端通信。
- 采用发布-订阅模式,实现组件和应用程序之间的松耦合事件驱动架构。
- 支持基于消息的 request-reply 同步通信模式。
- 所有事件都通过同一个端点发布,简化了API管理;支持动态的事件主题,无需预先定义端点;可以轻松添加新的事件类型,无需修改API结构。
二、应用场景
- 微服务通信: 服务间异步通信
- 数据集成: 异构系统数据同步
- 事件驱动架构: 构建事件驱动的应用
- 流处理: 实时数据流处理
- 云原生应用: 容器化环境中的事件处理
三、什么是CloudEvents?
CloudEvents 是一个以通用格式来描述事件数据的规范,旨在简化不同服务、平台间的事件声明和传输。
(一)核心目标
1、标准化事件格式:提供统一的事件数据结构
2、跨平台兼容:支持不同云平台和系统间的互操作
3、简化集成:减少系统间集成的复杂性
4、提高可观测性:标准化的事件格式便于监控和调试
(二)标准格式
{
"specversion":"1.0",
"id":"13a3f42d-7258-4ada-da6d-023a333b4662",
"type":"cos:created:object",
"source":"cos.cloud.tencent",
"subject":"qcs::cos:ap-guangzhou:uid1250000000:bucketname",
"time":"1615430559146",
"region":"ap-guangzhou",
"datacontenttype": "application/json;charset=utf-8",
"data":{
$data_value
}
}
(三)字段说明
1、必需字段
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
| id | String | ✅ | 事件的唯一标识符 |
| source | URI-Reference | ✅ | 事件的来源 |
| specversion | String | ✅ | CloudEvents规范版本 |
| type | String | ✅ | 事件的类型 |
2、可选字段
| 字段 | 类型 | 说明 |
|---|---|---|
| subject | String | 事件的主题或对象 |
| time | Timestamp | 事件发生的时间 |
| datacontenttype | String | 数据内容的MIME类型 |
| dataschema | URI | 数据模式的URI |
| data | Any | 事件的具体数据 |
发布事件时,将CloudEvent转换为消息中间件的原生Message对象,通过 cloudEvent.getSubject()获取事件的主题,作为消息中间件的主题(topic)。
3、事件源
-
内部事件源(TUS内部)
- ESB服务:微服务架构中的业务服务可以发送任意格式的消息到消息队列,或者通过HTTP API向事件网格发送CloudEvents格式的事件。
- 已集成的第三方服务:比如:泛微OA、SAP等,通过Webhook向事件网格的接收端点发送事件,支持签名验证。
- 其它服务:比如:CDC服务、磁盘占用率监控服务,主动向事件网格提供的HTTP端点发送事件,适用于微服务架构。
-
外部事件源
- Webhook:外部系统主动向事件网格提供的HTTP端点发送事件,适用于第三方系统集成。
- API网关:外部系统主动向API网关发送事件,API网关转发给事件网格,适用于统一API管理。
- 消息队列:对于RocketMQ、Rabbit、Kafka、pulsar等外部消息中间件,事件网格内部可以集成相应的消费者组件,可以直接订阅和消费消息队列中的事件,自动转换为CloudEvents格式。
-
如何接收事件(事件网格)