RocketMQ EventBridge 核心概念
理解 EventBridge 的核心概念可以帮助我们更好地分析和使用 EventBridge。本文重点介绍 EventBridge 中包含的术语。
- EventSource: 事件源。用于管理发送到 EventBridge 的事件,所有发送到 EventBridge 的事件都必须标记有源名称信息,对应于 CloudEvent 事件体中的 source 字段。
- EventBus: 事件总线。用于存储发送到 EventBridge 的事件。
- EventRule: 事件规则。当消费者需要订阅事件时,可以通过规则配置过滤和转换信息,将事件推送到指定的 target endpoint。
- FilterPattern: 事件过滤模式,用于在规则中配置 target endpoint 的过滤。
- Transform: 事件转换,将事件格式转换为 target endpoint 所需的数据格式。
- EventTarget: 事件的目标 endpoint,即实际的事件消费者。
接下来,我们将更详细地扩展这些概念。
EventSource
事件源代表事件的来源,用于描述一类事件,一般与微服务系统一一对应。例如:交易事件源、考勤事件源等。事件源是对事件进行大类划分,一个事件源往往包含多个事件类型(type),例如:交易事件源可能包含:订单事件、支付事件、退款事件等。
另外,值得注意的是,事件源不是用来描述导致事件的实体。相反,在 CloudEvent 中,我们一般使用 subject 来表示导致事件的实体资源。事件源类似于市场经济百货商场中的大类划分,比如生鲜区、日用品区、家电区等等。在事件中心“百货商场”中,我们可以通过事件源快速找到我们需要的事件。
EventBus
事件总线是事件存储的地方,它可以有多种实现,包括 Local、RocketMQ、Kafka 等。
当事件生产者发送事件时,必须指定事件总线。事件总线是 EventBridge 中的一等公民,所有其他资源围绕事件总线形成逻辑隔离,即:事件源和事件规则必须属于一个特定的事件总线。不同事件总线下的事件源和事件规则可以有相同的名称,但同一事件总线下的事件源和规则必须具有唯一的名称。
EventRule
当消费者需要订阅事件时,可以通过事件规则配置过滤和转换信息,将事件推送到指定的 target endpoint。因此,事件规则包含三个部分:事件过滤 + 事件转换 + 事件目标。
FilterPattern
通过使用事件过滤模式,我们可以对事件总线上的事件进行过滤,只推送 target endpoint 所需要的事件,从而减少不必要的打开,减轻消费者 target endpoint 的压力。目前,EventBridge 支持以下事件过滤功能
- 指定值匹配
- 前缀匹配
- 后缀匹配
- 排除匹配
- 数字匹配
- 数组匹配
- 以及复杂的组合逻辑匹配
(详细信息将在其他文章中介绍)
Transform
事件生产者的事件可能被多个消费者订阅,但不同消费者需要的事件数据格式往往不同。在这种情况下,需要将生产者产生的事件转换为消费者 target end 所需要的事件格式。目前,EventBridge 支持以下事件转换功能
- 完整事件:不进行转换,直接传递原始 CloudEvents;
- 部分事件:通过 JsonPath 语法从 CloudEvents 中提取需要传递到事件目标的内容;
- 常量:事件仅作为触发器,传递的内容为常量;
- 模板转换器:通过模板定义灵活地渲染传递的事件格式。
(详细信息将在其他文章中介绍)
EventTarget
事件目标是 EventBridge 架构中的事件消费者。在这个架构中,消费者只需要设计自己的业务模型,并提供一个通用的 API(这个 API 可以用来接收事件,也可以用来进行前端管理操作)。EventBridge 然后会根据 API 定义的数据格式,安全可靠地将事件推送到目标消费者。