RuleGo RuleGo
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文

广告采用随机轮播方式显示 ❤️成为赞助商
  • 快速入门

  • 规则链

  • 标准组件

  • 扩展组件

  • 自定义组件

  • 组件市场

    • 动态组件
      • 动态组件概述
      • 动态组件实现
        • 1. 通过子规则链DSL定义组件
        • 2. 通过编排和组合已有的组件实现组件逻辑:
        • 3. 把组件DSL注册到引擎中:
        • 4. 规则链使用组件:
    • 动态组件安装
    • 动态组件发布
  • 可视化

  • AOP

  • 触发器

  • 高级主题

  • RuleGo-Server

  • 问题

目录

动态组件

# 动态组件概述

RuleGo 规则链的组件除了原生组件(nc)外,还可以通过JSON DSL方式实现的动态组件(dc)。动态组件本质是子规则链,通过组合和编排现有组件,实现一个新的组件,并提供给规则链使用。

动态组件的特点是:

  1. 可以动态安装、升级、卸载组件。
  2. 通过JSON DSL定义组件,不需要编译,方便发布和升级。
  3. 可以把子规则链转换成组件。
  4. 对现在组件的二次封装和扩展。
  5. 可以通过组件市场 (opens new window) 在线安装和升级动态组件。

# 动态组件实现

通过以下步骤实现动态组件:

# 1. 通过子规则链DSL定义组件

示例:

{
  "ruleChain": {
    "id": "dataTransform",      // 组件类型标识
    "name": "温度转换",// 组件名称
    "root": false,//定义成子规则链
    "additionalInfo": {         // 组件元数据
      "category": "custom",    // 组件分类
      "icon": "custom-node", // 组件图标
      "description": "温度转换组件", // 组件描述
      "relationTypes": ["Success"], // 允许和下一个组件连接的关系类型
      "author": "admin",
      "version": "1.0.0",
      "inputSchema": {          // 参数配置定义(JSON Schema)
        "type": "object",
        "properties": { //组件参数定义
          "scaleFactor": {
            "type": "number",// 参数类型 支持(number,string,bool,object,array)
            "title": "换算系数",//标题
            "default": 1.8 //默认值
          }
        }
      }
    }
  },
  "metadata": {                // 组件逻辑实现
    "nodes": [
      {
      "type": "jsTransform",
      "configuration": {
        "jsScript": "msg.temperature = msg.temperature * ${vars.scaleFactor} + 32; return {'msg':msg,'metadata':metadata,'msgType':msgType};" // 通过${vars.fieldName}引用组件参数
      }
    }],
    "connections": []
  }
 
  }
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

动态组件DSL和规则链的DSL 一致。其中:

  • ruleChain.id:组件类型标识,用于唯一标识组件类型,规则链通过该标识使用组件。可以使用命名空间的方式定义组件类型标识,例如:x/dataTransform
  • ruleChain.additionalInfo 描述组件的元数据,包括组件的分类、图标、描述、关系类型、输入参数配置等。

additionalInfo 对象

字段名 类型 必填 描述 默认值
category 字符串 否 组件分类,对组件进行分类,帮助用户快速定位所需组件类型。 custom
icon 字符串 否 组件图标,用户界面上显示的图标,通常为图标类名或路径。 custom-node
description 字符串 否 组件描述,对组件功能的简要说明,帮助用户了解组件用途。
relationTypes 数组 否 和下一个组件允许的关系类型。 ["Success","Failure"]
author 字符串 否 作者。
version 字符串 否 版本。
inputSchema JSON Schema 否 组件参数配置定义,定义组件输入参数结构,遵循JSON Schema格式,指定参数类型、标题、默认值等。 详见inputSchema表

inputSchema: 组件参数配置如果不存在,则系统通过扫描${vars.fieldName}自动生成

inputSchema 对象

字段名 类型 必填 描述 示例值
type 字符串 是 参数类型,指定参数类型,支持number、string、bool、object、array等类型。 "number"
properties 对象 否 参数属性,定义各个参数的具体属性。 详见properties表

properties 对象

字段名 类型 必填 描述 示例值
type 字符串 否 参数类型,指定该参数的类型。 "number"
title 字符串 否 参数标题,参数的显示名称。 "换算系数"
default 数字 否 参数默认值,参数的默认值。 1.8

# 2. 通过编排和组合已有的组件实现组件逻辑:

通过metadata.nodes和metadata.connections 组合和编排已有的组件实现组件逻辑(和规则链实现逻辑一样)。

# 3. 把组件DSL注册到引擎中:

// 通过dsl定义组件:
// componentType:组件类型标识,用于唯一标识组件类型,规则链通过该标识使用组件。
// dsl:组件DSL
dynamicNode := NewDynamicNode(componentType, dsl)
Registry.Register(dynamicNode)
1
2
3
4
5

# 4. 规则链使用组件:

{
	"ruleChain": {
		"id": "9ehrY6tXl3y6",
		"name": "测试动态组件",
		"debugMode": false,
		"root": false,
		"disabled": false,
		"additionalInfo": {
			"createTime": "2025/03/26 15:42:39",
			"layoutX": "280",
			"layoutY": "280",
			"updateTime": "2025/03/26 15:42:39",
			"username": "admin"
		}
	},
	"metadata": {
		"endpoints": [],
		"nodes": [
			{
				"id": "node_2",
				"additionalInfo": {
					"layoutX": 610,
					"layoutY": 250
				},
				"type": "dataTransform",
				"name": "转换温度",
				"debugMode": false,
				"configuration": {
					"scaleFactor": 1.8
				}
			},
			{
				"id": "node_4",
				"additionalInfo": {
					"layoutX": 920,
					"layoutY": 260
				},
				"type": "log",
				"name": "打印日志",
				"debugMode": false,
				"configuration": {
					"jsScript": "return 'Incoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"
				}
			}
		],
		"connections": [
			{
				"fromId": "node_2",
				"toId": "node_4",
				"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
53
54
在 GitHub 上编辑此页 (opens new window)
上次更新: 2025/03/31, 01:52:11
自定义组件概述
动态组件安装

← 自定义组件概述 动态组件安装→

Theme by Vdoing | Copyright © 2023-2025 RuleGo Team | Apache 2.0 License

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式