RuleGo - 一个基于 Go 语言的新一代组件编排规则引擎
本文转载自微信公众号「码农先森」,原文链接:https://mp.weixin.qq.com/s/gr8YJc-jUqz4GrSsMX1C1Q
什么是 RuleGo?
RuleGo 是一个基于 Go 语言的轻量级、高性能、嵌入式、新一代组件编排规则引擎。它可以帮助你快速构建低耦合、灵活的系统,实时响应和调整业务需求变更。
RuleGo 还提供大量可复用的组件,支持对数据进行聚合、过滤、分发、转换、丰富和执行各种动作,也能和各种协议、系统进行联动和集成。
它在低代码、业务代码编排、数据集成、工作流、大模型智能体、边缘计算、自动化、IoT 等多种场景具有广泛的应用潜力。
核心特性
轻量级
无外部中间件依赖,在低成本设备中也能高效对数据进行处理和联动,适用于物联网边缘计算。
高性能
得益于 Go 的高性能特性,另外 RuleGo 采用协程池和对象池等技术。
双模式
嵌入式和独立部署模式,支持把 RuleGo 嵌入到现有应用中,作为一个内部组件运行。也可以作为中间件独立部署,提供规则引擎以及编排服务。
组件化
所有业务逻辑都是组件,并能灵活配置和重用它们。
规则链
可以灵活地组合和重用不同的组件,实现高度定制化和可扩展性的业务流程。
流程编排
支持对规则链组件进行动态编排,不重启应用情况下,替换或者新增业务逻辑。
扩展简单
提供丰富灵活的扩展接口,可以很容易地实现自定义组件或者引入第三方组件。
动态加载
支持通过 Go plugin 动态加载组件和扩展组件。
规则链嵌套
支持子规则链嵌套,实现流程复用。
内置大量组件
消息路由、脚本转换、过滤器、gRPC、HTTP、MQTT、发送邮件、数据库操作等组件。可以自行扩展其他组件。
上下文隔离机制
可靠的上下文隔离机制,无需担心高并发情况下的数据串流。
AOP 机制
允许在不修改规则链或节点的原有逻辑的情况下,对规则链的执行添加额外的行为,或者直接替换原规则链或者节点逻辑。
数据集成
允许动态配置 Endpoint,例如:HTTP Endpoint、MQTT Endpoint、TCP/UDP Endpoint、Kafka Endpoint、Schedule Endpoint 等。
典型使用场景
边缘计算
可以在边缘服务器部署 RuleGo,对数据进行预处理,筛选、聚合或者计算后再上报到云端。数据的处理规则和分发规则可以通过规则链动态配置和修改,而不需要重启系统。类似 node-red 系统。
物联网
收集设备数据上报,经过规则链的规则判断,触发一个或者多个动作,例如:发邮件、发告警、和其他设备或者系统联动。
数据分发
可以根据不同的消息类型,调用 HTTP、MQTT 或者 gRPC 把数据分发到不同系统。
应用集成
把 RuleGo 当做胶水连接各种系统或者协议,例如:ssh、webhook、kafka、消息队列、数据库、chatGPT、第三方应用系统。
异构系统数据集中处理
从不同的数据源(如 MQTT、HTTP、WS、TCP/UDP 等)接收数据,然后对数据进行过滤、格式转换、然后分发到数据库、业务系统或者仪表板。
高度定制化业务
把高度定制化或者经常变化的业务解耦出来,交给 RuleGo 规则链进行管理。业务需求变化而不需要重启主程序。
复杂业务编排
把业务封装成自定义组件,通过 RuleGo 编排和驱动这些自定义的组件,业务逻辑并支持动态调整和替换。
微服务编排
通过 RuleGo 编排和驱动微服务,或者动态调用第三方服务处理业务,并返回结果。
业务代码和业务逻辑解耦
例如:用户积分计算系统、风控系统。
自动化
例如:CI/CD 系统、流程自动化系统、营销自动化系统。
低代码
例如:低代码平台、iPaaS 系统、ETL、类 LangFlow 系统(对接大模型提取用户意图,然后触发规则链与其他系统进行联动或者进行业务处理)。
快速开始
安装
使用 go get 命令安装 RuleGo:
1 | go get github.com/rulego/rulego |
或者使用 gitee/gitcode 源:
1 | go get gitee.com/rulego/rulego |
基本使用
RuleGo 使用很简单。只需以下 3 步:
第一步:使用 JSON 定义规则链
1 | { |
第二步:导入 RuleGo 包,并使用规则链定义,创建一个规则引擎实例
1 | import "github.com/rulego/rulego" |
第三步:把消息负荷、消息类型、消息元数据交给规则引擎实例处理
1 | // 定义消息元数据 |
动态更新规则链
可以在不重启应用的情况下实时更新规则链逻辑:
1 | // 动态更新规则链逻辑 |
规则引擎实例管理
1 | // 加载文件夹所有规则链定义到规则引擎池 |
配置
1 | // 创建一个默认的配置 |
组件生态
RuleGo 的核心特性是组件化,所有业务逻辑都是组件,并能灵活配置和重用它们。目前 RuleGo 已经内置了大量常用的组件。
标准组件
- rulego-components:标准组件库
- rulego-components-ai:AI 场景组件库
- rulego-components-ci:CI/CD 场景组件库
- rulego-components-iot:IoT 场景组件库
- rulego-components-etl:ETL 场景组件库
生态工具
- RuleGo-Editor:规则链可视化编辑器
- RuleGo-Server:自动化工作流平台
- rulego-marketplace:动态组件和规则链市场
性能表现
RuleGo 大部分工作都在初始化时完成,执行规则链时几乎不会额外增加系统开销,资源占用极低,特别适合在边缘服务器运行。
另外 RuleGo 使用有向无环图来表示规则链,每个输入消息只需要沿着图中的路径进行处理,无需匹配所有的规则,这大大提高了消息处理和路由的效率,也节省了系统资源。
性能测试用例
测试环境: 树莓派 2(900MHz Cortex-A7×4,1GB LPDDR2)
数据大小: 260B
规则链: JS 脚本过滤 → JS 复杂转换 → HTTP 推送
测试结果: 100 并发和 500 并发,内存占用变化不大都在 19M 左右
总结
RuleGo 是一个非常强大的规则引擎框架,特别适合以下场景:
- 系统业务复杂,代码臃肿不堪
- 业务场景高度定制化或者经常变动
- 系统需要对接大量的第三方应用或者协议
- 需要端对端的物联网解决方案或者边缘计算场景
- 需要对异构系统数据集中处理
- 想尝试在 Go 语言实现热部署
如果你的项目符合上述任何一个场景,RuleGo 框架会是一个非常好的解决方案。
相关链接:
- GitHub: https://github.com/rulego/rulego
- Gitee: https://gitee.com/rulego/rulego
- 官方文档: https://rulego.cc
转载自微信公众号「码农先森」



