事件模式是事件总线EventBridge用来过滤相关事件的模式定义。事件总线EventBridge通过事件模式过滤事件并将事件路由到事件目标,事件模式必须和匹配的事件具有相同的结构。本文介绍事件模式的常用类型。
注意事项
事件模式匹配的注意点如下:
事件必须包含事件模式中列出的所有字段名对应的过滤项。
事件模式是逐个字符精确匹配的 ,需注意大小写,匹配过程中不会对字符串进行任何标准化的操作。
事件模式匹配中,JSON对象的各个属性支持AND语义,数组中的各元素支持OR语义。
事件模式当前匹配仅支持根据事件的属性进行过滤,暂不支持data数据过滤。
创建事件模式时,某一字段下的匹配字段需符合一定的规则,详见下文。
指定值匹配
您可以指定某个字段的值进行匹配。
例如,以下示例事件模式只匹配source是分布式消息服务Kafka的事件。下表介绍事件从事件源发出经过事件模式过滤的过程。
从事件源接收的事件 | 事件模式 | 模式过滤后的事件 |
---|
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| {
"source": [
{
"exact" : "ctyun:kafka"
}
]
}
| {
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
|
前缀匹配
您可以指定某个字段的值的前缀进行匹配。
例如,以下示例事件模式只匹配type字段以ctyun:kafka为前缀的事件。下表介绍示例事件从事件源发出经过事件模式过滤的过程。
从事件源接收的事件 | 事件模式 | 模式过滤后的事件 |
---|
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| {
"type": [
{
"prefix" : "ctyun:kafka"
}
]
}
| {
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
|
后缀匹配
您可以指定某个字段的值的后缀进行匹配。
例如,以下示例事件模式匹配type字段以ctyun:kafka为前缀的事件,且以Message结尾的事件。下表介绍示例事件从事件源发出经过事件模式过滤的过程。
从事件源接收的事件 | 事件模式 | 模式过滤后的事件 |
---|
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx713",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Delete",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| {
"type": [
{
"prefix" : "ctyun:kafka",
"suffix" : "Message"
}
]
}
| {
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
|
包含匹配
您可以指定某个字段包含特定字段值进行匹配。
例如,以下示例事件模式匹配type字段包含kafka的事件。下表介绍示例事件从事件源发出经过事件模式过滤的过程。
从事件源接收的事件 | 事件模式 | 模式过滤后的事件 |
---|
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx713",
"source": "ctyun:rocketmq",
"type": "ctyun:rocketmq:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| {
"type": [
{
"contains" : "kafka"
}
]
}
| {
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
|
例如,以下示例事件模式匹配type字段包含kafka或rocketmq的事件。下表介绍示例事件从事件源发出经过事件模式过滤的过程。
从事件源接收的事件 | 事件模式 | 模式过滤后的事件 |
---|
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx713",
"source": "ctyun:rocketmq",
"type": "ctyun:rocketmq:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:rocketmq:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| {
"type": [
{
"contains" : "kafka"
},
{
"contains" : "rocketmq"
}
]
}
| {
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx713",
"source": "ctyun:rocketmq",
"type": "ctyun:rocketmq:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:rocketmq:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
|
匹配数组
事件模式中每个字段的值均为一个包含一个或多个值的数组,如果数组中的任一值匹配事件中的值,则模式匹配。下表介绍示例事件从事件源发出经过事件模式过滤的过程。
从事件源接收的事件 | 事件模式 | 模式过滤后的事件 |
---|
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
{
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx713",
"source": "ctyun:rocketmq",
"type": "ctyun:rocketmq:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:rocketmq:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
| {
"source": [
{
"exact": [
"ctyun:kafka",
"ctyun:mqtt"
]
}
]
}
| {
"id": "f36b49b6-6891-4b59-b11c-bf689xxxx712",
"source": "ctyun:kafka",
"type": "ctyun:kafka:Topic:Message",
"specversion": "1.0",
"datacontentype": "application/json; charset=utf-8",
"subject": "ctyun:kafka:75dcxx1eb5:topic:source1",
"time": "2024-12-03T09:48:00.696Z",
"data": {
"key": "test2",
"value": "test1"
}
}
|