事件总线EventBridge支持事件内容转换,即将事件源发出的符合CloudEvents 1.0协议的事件转换为事件目标可以接收的格式。本文介绍事件总线EventBridge提供的事件转换类型。
事件总线EventBridge支持的事件内容转换类型如下:
完整事件
当转化类型为完整事件时,事件总线EventBridge不对事件进行转换,将事件的完整结构路由到事件目标。
下表介绍经过完整事件转换前后的事件示例。
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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-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"
}
}
|
部分事件
当转换类型为部分事件时,事件总线EventBridge通过JSONPath从符合CloudEvents格式的事件中提取事件中的参数,将指定的事件内容路由到事件目标。
下表介绍经过部分事件转换前后的事件示例。
示例一:转换成字符串
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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"
}
}
| $.data.value
| test1
|
示例二:转换成JSON格式
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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"
}
}
| $.data
| {
"key": "test2",
"value": "test1"
}
|
固定值
当转换类型为常量时,事件只起到触发器的作用,不管事件内容是什么,事件总线EventBridge都把常量路由到事件目标。
下表介绍经过常量转换前后的事件示例。
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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"
}
}
| ctyun
| ctyun
|
模板
当转换类型为模板时,通过自定义模板、定义模板里需要的变量,事件总线EventBridge通过JSONPath从事件中提取参数,把这些值存放在变量中,然后按照模板定义的格式路由到事件目标。
下表介绍经过模板转换前后的事件示例。
说明 1:当转换类型为模板时,模板的变量值既可以是一个JSONPath,也可以是一个字符串常量。
2:模板的变量值不支持嵌套多层结构。
示例一:转换成简单字符串
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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"
}
}
| 模板 {
"value": "$.data.value"
}
value is ${value}
| value is test1
|
示例二:通过模板转换成JSON
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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"
}
}
| 模板 {
"value": "$.data.value"
}
{
"value": "${value}"
}
| {
"value": "test1"
}
|
示例三:转换时变量为JSON形式
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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"
}
}
| 模板 {
"data": "$.data"
}
{
"value": ${data}
}
| {
"value": {
"key": "test2",
"value": "test1"
}
}
|
示例四:转换时变量进行JSON转义
若希望转换的字符串保持JSON字符串格式,不破坏原有JSON的格式,可使用jsonEscape函数,如下所示:
转换前的事件 | 转换类型 | 转换后的事件 |
{
"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"
}
}
| 模板 {
"data": "$.data"
}
{
"value": "${jsonEscape(data)}"
}
| {
"value": "{\"key\": \"test2\",\"value\": \"test1\"}"
}
|
空
当转换类型为空时,事件总线EventBridge将事件路由到事件目标时,对应的属性为空。如希望分布式消息服务Kafka事件目标的Key、分布式消息服务RocketMQ事件目标的Tags为空时,可以将对应属性设置为空。