tencent cloud

文档反馈

事件模式

最后更新时间:2024-11-01 20:44:50
    事件模式是事件总线 EventBridge 用来过滤相关事件的模式定义。事件总线 EventBridge 通过事件模式过滤事件并将事件路由到事件目标,事件模式必须和匹配的事件具有相同的结构。本文介绍事件模式的常用类型。

    注意事项

    事件模式匹配的原则如下:
    事件必须包含事件模式中列出的所有字段名,且事件模式里的字段名必须和事件中的字段名具有相同嵌套结构。
    事件模式是逐个字符精确匹配的 ,需注意大小写,匹配过程中不会对字符串进行任何标准化的操作。
    要匹配的值遵循 JSON 规则:用引号引起来的字符串、数字以及不带引号的关键字 true、false 和 null。

    指定值及 OR 和 AND 模式

    您可以指定某个字段的值进行匹配,对比值在 JSON 阵列中,以 [ ] 包围。 [ ] 内值为 OR,KEY 匹配为 AND。 以 COS 数据为例,接收到的事件如下:
    {
    "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",
    "resource": [
    "qcs::eb:ap-guangzhou:uid1250000000:eventbusid/eventruleid"
    ],
    "data": {
    "name": "testname",
    "scope": 100
    }
    }
    对于如上事件,若指定 data 字段的 name 值进行指定值匹配,可以被正常触发的规则如下:
    {
    "data": {
    "name": [
    "testname"
    ]
    }
    }
    若指定 data 字段的 name 值进行 OR 匹配,可以被正常触发的规则如下:
    {
    "data": {
    "name": [
    "testname","test"
    ]
    }
    }

    前缀匹配

    您可以对比事件来源中的前缀进行键值匹配,例如 { "prefix": "2021-10-02" }。 以 COS 数据为例,接收到的事件如下:
    {
    "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",
    "resource": [
    "qcs::eb:ap-guangzhou:uid1250000000:eventbusid/eventruleid"
    ],
    "data": {
    "name": "testname",
    "scope": 100
    }
    }
    指定 data 字段的 name 的前缀匹配值,可以被正常触发的规则如下:
    {
    "data":{
    "name":[
    {
    "prefix":"te"
    }
    ]
    }
    }

    后缀匹配

    您可以对比事件来源中的后缀进行键值匹配,例如 { "suffix": ".txt" }。 以 TDMQ 数据为例,接收到的事件如下:
    {
    "specversion": "1.0",
    "id": "13a3f42d-7258-4ada-da6d-023a333b4662",
    "type": "connector:tdmq",
    "source": "tdmq.cloud.tencent",
    "subject": "qcs::tdmq:$region:$account:topicName/$topicSets.clusterId/$topicSets.environmentId/$topicSets.topicName/$topicSets.subscriptionName",
    "time": "1615430559146",
    "region": "ap-guangzhou",
    "datacontenttype": "application/json;charset=utf-8",
    "data": {
    "topic": "persistent://appid/namespace/topic-1",
    "tags": "testtopic",
    "TopicType": "0",
    "subscriptionName": "xxxxxx",
    "toTimestamp": "1603352765001",
    "partitions": "0",
    "msgId": "123345346",
    "msgBody": "Hello from TDMQ!"
    }
    }
    指定 data 字段的 topic 的后缀匹配值,可以被正常触发的规则如下:
    {
    "data": {
    "topic": [{
    "suffix":"/topic-1"
    }]
    }
    }

    除外匹配

    您可以指定某个字段除了提供的值之外的任何值进行匹配,例如 { "anything-but": "initializing" }。 以 COS 数据为例,接收到的事件如下:
    {
    "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",
    "resource":[
    "qcs::eb:ap-guangzhou:uid1250000000:eventbusid/eventruleid"
    ],
    "data":{
    "name":"testname",
    "scope":100
    }
    }
    指定 data 字段的 name 的除外匹配值,可以被正常触发的规则如下:
    {
    "data": {
    "name": [{
    "anything-but":"test1"
    }]
    }
    }
    指定 data 字段的 name 的除外匹配值,不可以被正常触发的规则如下:
    {
    "data": {
    "name": [{
    "anything-but":"testname"
    }]
    }
    }

    包含匹配

    您可以指定 data 中存在的某个字段进行匹配,例如 { "contain": ".txt" }。 以 TDMQ 数据为例,接收到的事件如下:
    {
    "specversion": "1.0",
    "id": "13a3f42d-7258-4ada-da6d-023a333b4662",
    "type": "connector:tdmq",
    "source": "tdmq.cloud.tencent",
    "subject": "qcs::tdmq:$region:$account:topicName/$topicSets.clusterId/$topicSets.environmentId/$topicSets.topicName/$topicSets.subscriptionName",
    "time": "1615430559146",
    "region": "ap-guangzhou",
    "datacontenttype": "application/json;charset=utf-8",
    "data": {
    "topic": "persistent://appid/namespace/topic-1",
    "tags": "testtopic",
    "TopicType": "0",
    "subscriptionName": "xxxxxx",
    "toTimestamp": "1603352765001",
    "partitions": "0",
    "msgId": "123345346",
    "msgBody": "Hello from TDMQ!"
    }
    }
    指定 data 字段的 topic 的包含匹配值,可以被正常触发的规则如下:
    {
    "data": {
    "topic": [{
    "contain":"topic-1"
    }]
    }
    }
    指定 data 字段的 topic 同时包含多个匹配值,可以被正常触发的规则如下:
    {
    "data": {
    "topic": [{
    "contain":["topic-1","appid"]
    }]
    }
    }

    数组匹配

    您可以通过语法过滤数组类型的字段,例如 {"array": "{\\"key1\\":\\"value1\\"}"}。 典型场景如要根据产品属性 data 结构中的某个字段生成事件规则,以数据订阅 DTS 数据为例,接收到的事件如下:
    {
    "id": "13a3f42d-7258-4ada-da6d-023a33******",
    "type": "dts:mysql:update",
    "specversion": "1.0",
    "source": "dts.cloud.tencent",
    "subject": "cdb-xxx",
    "time": 1660013278609,
    "region": "ap-guangzhou",
    "dataContentType": "application/json;charset=utf-8",
    "tags": {
    "key1": "value1",
    "key2": "value2"
    },
    "data": {
    "topic": "topic-subs-xxx-cdb-xxx",
    "partition": 0,
    "offset": 72235,
    "partition_seq": 72236,
    "event": {
    "dmlEvent": {
    "dmlEventType": 1,
    "columns": [
    {
    "name": "time",
    "originalType": "time"
    },
    {
    "name": "id",
    "originalType": "int(11)",
    "isKey": true
    }
    ],
    "rows": [
    {
    "oldColumns": [
    {
    "dataType": 13,
    "charset": "utf8",
    "bv": "c3NzYWFhcWFxMTEx"
    }
    ],
    "newColumns": [
    {
    "dataType": 13,
    "charset": "utf8",
    "bv": "MjA6MTI6MjI="
    }
    ]
    }
    ]
    }
    },
    "header": {
    "sourceType": 1,
    "messageType": 2,
    "timestamp": 1648555949,
    "serverId": 109741,
    "fileName": "mysql-bin.000005",
    "position": 11172920,
    "gtid": "38cecd93-a9c2-11ec-b952-043f72d8da53:55",
    "schemaName": "dts",
    "tableName": "dts_mysql",
    "seqId": 72286,
    "isLast": true
    },
    "eb_consumer_time": "2022-03-29T20:12:29+08:00",
    "eb_connector": "cdb-xxx"
    }
    }
    对于如上事件,若需要通过 columns 字段进行规则匹配,可以被正常触发的规则如下:
    {
    "source": "dts.cloud.tencent",
    "type": "dts:mysql:update",
    "data": {
    "event": {
    "dmlEvent": {
    "columns": [{
    "array": "{\\"name\\":\\"time\\"}"
    }]
    }
    }
    }
    }
    一个字段的多条数据过滤规则时,多条数据之间是 “与” 的关系:
    {
    "source": "dts.cloud.tencent",
    "type": "dts:mysql:update",
    "data": {
    "event": {
    "dmlEvent": {
    "columns": [{
    "array": "{\\"name\\":\\"id\\",\\"originalType\\":\\"int(11)\\"}"
    }]
    }
    }
    }
    }

    IP 地址匹配

    您可以指定 data 中字段的 IP 地址。例如,以下示例事件模式中只匹配 a 为10.0.0.0/24的事件:{ "cidr": "10.0.0.0/24" }。 以 COS 数据为例,接收到的事件如下:
    {
    "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",
    "resource": [
    "qcs::eb:ap-guangzhou:uid1250000000:eventbusid/eventruleid"
    ],
    "data": {
    "name": "testname",
    "scope": 100,
    "source-ip": "10.0.0.123"
    }
    }
    指定 data 字段的 source-ip 包含匹配值,可以被正常触发的规则如下:
    {
    "data": {
    "source-ip": [{
    "cidr": "10.0.0.0/24"
    }]
    }
    }

    更多说明

    进行模式匹配时,null 值和空字符串不等同。用于匹配空字符串的模式不会匹配到 null 值。
    所有匹配模式可被嵌套使用,如下示例,同时嵌套除外匹配与前缀匹配。
    {
    "data": {
    "name": [{
    "anything-but": {
    "prefix": "init"
    }
    }]
    }
    }
    所有匹配模式支持 OR 模式规则,如下示例,指定前缀匹配或指定后缀匹配。
    {
    "data": {
    "topic": [
    {
    "prefix":"pre"
    },
    {
    "suffix":"suf"
    }
    ]
    }
    }
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持