事件模式是事件總線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"
}
}
|