规则链
# 规则链DSL
规则链的DSL配置文件是一个 JSON格式的文件,总体结构如下:
{
"ruleChain": {
"id":"rule01"
},
"metadata": {
"endpoints": [
],
"nodes": [
],
"connections": [
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# ruleChain:规则链基础信息
字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
id | string | 是 | 规则链ID,规则链的唯一标识 |
name | string | 否 | 规则链名称,可以是任意字符串 |
root | boolean | 否 | 表示这个规则链是根规则链还是子规则链。每个规则引擎实例只允许有一个根规则链 |
debugMode | boolean | 否 | 表示是否处于调试模式。如果为真,覆盖node的debugMode值。 |
configuration | object | 否 | 规则链的配置信息,包含变量和密钥列表 |
additionalInfo | object | 否 | 扩展字段,用于保存额外信息。 |
# ruleChain.configuration: 规则链的配置信息
字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
vars | object | 否 | 变量列表,格式为:varKey:varValue |
secrets | object | 否 | 密钥列表,格式为:secretKey:secretValue |
# metadata: 规则链的元数据,包含节点、连接和接入端点的信息
字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
endpoints | endpoint[] | 否 | 规则链的接入端点列表 |
firstNodeIndex | int | 否 | 执行的第一个节点的索引值,默认:0 |
nodes | node[] | 是 | 规则链中的节点列表 |
connections | connection[] | 是 | 规则链的连接列表 |
# metadata.nodes: 规则链中的节点列表
字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
id | string | 是 | 节点ID,节点的唯一标识 |
type | string | 是 | 节点类型 |
name | string | 否 | 节点名称,可以是任意字符串 |
debugMode | boolean | 否 | 表示这个节点是否处于调试模式。如果为真,当节点处理消息时,会触发调试回调函数 |
configuration | object | 否 | 节点的配置信息,包含变量和密钥列表 |
additionalInfo | object | 否 | 扩展字段,用于保存额外信息。 |
# metadata.nodes.configuration: 节点配置
不同的节点类型有不同的配置字段,具体请参考具体的组件配置文档。
# metadata.nodes.additionalInfo: 组件可视化坐标信息
字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
layoutX | int | 否 | 组件的x坐标 |
layoutY | int | 否 | 组件的y坐标 |
description | string | 否 | 组件描述 |
# metadata.connections: 规则链的连接列表
字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
fromId | string | 是 | 连接源节点id,应该与nodes数组中的某个节点id匹配 |
toId | string | 是 | 连接目标节点id,应该与nodes数组中的某个节点id匹配 |
type | string | 否 | 连接类型,决定了什么时候以及如何把消息从一个节点发送到另一个节点。它应该与源节点类型支持的连接类型之一匹配。例如,一个JS过滤器节点支持两种连接类型:"True"和"False",表示消息是否通过或者不通过过滤条件 |
# metadata.endpoints: 规则链的接入端点列表 v0.21.0+
用于配置规则链的自动触发器,例如可以配置:mqtt、http、ws、schedule等接入端点触发器,详细参考:Endpoint DSL
# 示例
以下是一个简单的规则链配置文件的示例:
{
"ruleChain": {
"id": "rule01",
"name": "测试规则链",
"root": true
},
"metadata": {
"nodes": [
{
"id": "s1",
"type": "jsFilter",
"name": "过滤",
"debugMode": true,
"configuration": {
"jsScript": "return msg!='bb';"
}
},
{
"id": "s2",
"type": "jsTransform",
"name": "转换",
"debugMode": true,
"configuration": {
"jsScript": "metadata['test']='test02';\n metadata['index']=50;\n msgType='TEST_MSG_TYPE2';\n var msg2=JSON.parse(msg);\n msg2['aa']=66;\n return {'msg':msg2,'metadata':metadata,'msgType':msgType};"
}
},
{
"id": "s3",
"type": "restApiCall",
"name": "推送数据",
"debugMode": true,
"configuration": {
"restEndpointUrlPattern": "http://192.168.216.21:9099/api/socket/msg",
"requestMethod": "POST",
"maxParallelRequestsCount": 200
}
}
],
"connections": [
{
"fromId": "s1",
"toId": "s2",
"type": "True"
},
{
"fromId": "s2",
"toId": "s3",
"type": "Success"
}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
其逻辑如图所示:
在 GitHub 上编辑此页 (opens new window)
上次更新: 2024/08/18, 13:07:53