惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
V
Visual Studio Blog
有赞技术团队
有赞技术团队
U
Unit 42
D
Docker
小众软件
小众软件
F
Full Disclosure
I
Intezer
Scott Helme
Scott Helme
P
Privacy International News Feed
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
B
Blog
Martin Fowler
Martin Fowler
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Spread Privacy
Spread Privacy
宝玉的分享
宝玉的分享
S
Security Affairs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
月光博客
月光博客
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
Schneier on Security
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Threat Research - Cisco Blogs
量子位
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Heimdal Security Blog
N
Netflix TechBlog - Medium
H
Hacker News: Front Page
P
Proofpoint News Feed
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
S
Schneier on Security

博客园 - 漫思

python项目的构建 nodejs构建CICD时的思考  成为 AI 智能体工程师的 10 个步骤 es6的 yield python 中的 yield 笔记本的A壳 thinkpad 更换 reduce() in Python python的字段赋值和取值的操作 python的语法类似于lodash分组展开,合并分组操作 SelectMany C# lodash 数组的常用做法 lodash里面的常用方法 技术的边界 Reduce 和 Transduce 的含义 尤雨溪创办的 VoidZero 官宣加入 Cloudflare,前端 Vite 等保持开源 Ramda 函数库参考教程 ramda es 数组的方法 flatmap map object.entity的教程 Map与FlatMap:在数据处理中的区别与联系 flat、flatmap与map的用法区别1 flat、flatmap与map的用法区别 AI不是从天而降,它经历了七十年三起三落:读懂AI的第三课 Agent 17 种架构模式 分析 & 思考 只有踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!试试它crypto.randomUUID() FastAPI python并发 代码是 AI 写的,生产事故谁背锅? AI Agent 走出 Demo 幻觉的唯一解药:Harness Engineering 高管的 AI 精神病 小米开源可控视频音效生成模型 ControlFoley ​IBM 联合红帽投资 50 亿美元:帮助企业确保开源软件安全 国家大基金领投 DeepSeek,首轮融资投前估值 450 亿美元 SpaceX 自研 AI 训练栈 V1.0 接近完工:用 C 重写、适配 22 万块 GB300 GPU 高管的 AI 精神病 - 漫思 做一款企业真正敢用的AI测试应用,到底有多难?究竟难在哪? - 漫思 工良吐槽篇:万字长文细说 AI 落地之笑谈 koarouter的路由基本能力 7. 简单语句 class-validator class- @koa/router 分路由 这是我见过的最好的koa2 classvalidate typeorm的能力 HLS.js destroy时会取消请求吗 从入门到精通:2025年本体管理工具选型指南,8款工具助你驾驭语义网络 一文入门智能体:dify 超快速构建AI agent C# 15 类型系统改进:Union Types skill网站 应无所住,而生其心 process.stdin.isTTY 谷歌学术走过风雨十年 听创始人畅谈苦辣酸甜 - 漫思 process.stdin.isTTY 是false的具体情况 asyncio 较为复杂的demo asyncio 简单demo python Annotated 独家解读:淘宝使用 Node.js 的 TypeScript 多场景开发和实践 mac uv 使用 Python 包管理工具 uv 使用教程 Python依赖管理新标杆:UV工具安装与实战指南 python的uv lobehubui python的enum通过int进行初始化 python的枚举类型 深度拆解:AI 智能体 Harness 的构造【译】 LlamaIndex是什么?LlamaIndex综述!看这一篇就够了! python和langchain的简单教程 nodejs的顶尖开源项目 基础Pydantic+TypedDict+Annotated +Dataclass 深度解析Python结构化数据工具:dataclass、Pydantic Model与TypedDict 被 LangChain 全家桶搞晕了?LangGraph、LangSmith、LangFlow 一文读懂 - 漫思 谁才是企业级开源平台的优选?OpenCSG与Dify、Coze、Langflow、Ollama 的差异化之路 四大框架全景解析:LangChain、LangGraph、DeepAgent、LangFlow 测试数据管理方式对比:dict vs dataclass vs TypedDict 革命性的写作:MDX 让你的 Markdown 全面动起来 Python - pydantic 入门介绍与 Models 的简单使用 欢迎使用 Pydantic¶ python模块导入 Python 里通常说“数组切片”,大多数时候指的是列表切片。基本格式是: 自定义hook的写法 Python 遍历字典的8种方法 python基础教程 or的简单用法 C# 15 引入了 联合类型 asyncio的基础理论 flask配置热更新 Form.Item 无法直接绑定两个 name Form.Item 的双向翻译官:getValueFromEvent 与 getValueProps Knex.js入门指南:Node.js最强大的SQL查询构建器 knex.js1 Knex.js RFC 9535:JSONPath 的标准化之路 C#多线程Thread.Join()的详解 Pretext:值得关注的文本排版引擎 Flask入门(四):Flask静态文件及配置 【高并发】消息队列思路 为何高并发系统中都要使用消息队列?这次彻底懂了! Node.js 消息队列应用:RabbitMQ、Kafka 与处理高并发任务 大文件上传下载处理方案-断点续传,秒传,分片,合并 Node.js 缓存策略优化:Redis、Memcached 与本地缓存实现 .NET开发者的救星:8个让你告别996的高效库 别再吹牛了,100% Vibe Coding 存在无法自洽的逻辑漏洞!
RuleGo
漫思 · 2026-06-28 · via 博客园 - 漫思

RuleGo

GoDoc Go Report codecov test build build QQ-720103251 Mentioned in Awesome Go

English| 简体中文

官方网站 | 文档 | 贡献指南

logo

RuleGo 是一个基于Go语言打造的轻量级、高性能、嵌入式、可编排组件式的规则引擎。

它可以帮助你快速实现松耦合、灵活可变的系统,实时响应和调整业务需求的变化。

RuleGo 还提供大量可复用的组件,支持数据聚合、分流、分发、转换、丰富和执行各种动作,还能与各种协议和系统进行交互和集成。 在低代码、业务编排、数据集成、工作流、大模型智能体、边缘计算、自动化、物联网等场景具有广泛的应用潜力。

特性

  • 轻量级: 无外部中间件依赖,在低成本设备上高效处理数据和联动,适合物联网边缘计算。
  • 高性能: 得益于Go语言的高性能特性,RuleGo还采用协程池、对象池等技术。
  • 双模式: 嵌入式与独立部署模式。支持将 RuleGo 嵌入到现有应用中。也可以独立部署为中间件,提供规则引擎和编排服务。
  • 组件化: 所有业务逻辑都是组件化,灵活配置和复用。
  • 规则链: 灵活组合和复用不同组件,实现高度定制化和可扩展的业务流程。
  • 工作流编排: 支持动态编排规则链组件,替换或新增业务逻辑无需重启应用。
  • 易扩展: 提供丰富灵活的扩展接口,可轻松实现自定义组件或引入第三方组件。
  • 动态加载: 支持通过Go插件动态加载组件和扩展。
  • 嵌套规则链: 支持嵌套子规则链,复用流程。
  • 内置组件: 包含大量组件,如消息类型切换JavaScript SwitchJavaScript过滤器JavaScript转换器HTTP推送MQTT推送发送邮件日志记录等。其他组件可按需扩展。
  • 上下文隔离机制: 可靠的上下文隔离机制,无需担心高并发数据流窜问题。
  • AOP机制: 可以在规则链或节点执行时添加额外行为,或者直接替换规则链或节点的原有逻辑,而无需修改其原有逻辑。
  • 数据集成: 支持动态配置Endpoint,如HTTP EndpointMQTT EndpointTCP/UDP EndpointUDP EndpointKafka EndpointSchedule Endpoint等。

使用场景

RuleGo 是一个可编排的规则引擎,擅长解耦你的系统。

  • 如果你的系统业务复杂,代码臃肿
  • 如果你的业务场景高度定制化或者经常变动
  • 如果你的系统需要对接大量第三方应用或协议
  • 或者你需要端到端的物联网解决方案
  • 或者你需要集中处理异构系统数据
  • 或者你想尝试Go语言热部署... 那么RuleGo框架将是非常好的解决方案。

典型使用场景

  • 边缘计算: 在边缘服务器部署RuleGo,对数据进行预处理、过滤、聚合或者计算后再上报到云端。数据处理的规则和分发规则可以通过规则链动态配置和修改,无需重启系统。
  • 物联网: 收集设备数据上报,通过规则链做规则判断,然后触发一个或者多个动作,例如发送邮件、告警、联动其他设备或者系统。
  • 数据分发: 根据不同的消息类型,通过HTTP、MQTT或者gRPC把数据分发到不同系统。
  • 应用集成: 使用RuleGo作为粘合剂来连接各种系统或协议,例如SSH、webhook、Kafka、消息队列、数据库、ChatGPT、第三方应用系统。
  • 异构系统数据集中处理: 接收来自不同来源的数据(如MQTT、HTTP、WS、TCP/UDP等),然后进行过滤、格式转换后分发到数据库、业务系统或者大屏。
  • 高度定制化业务: 把高度定制化或者经常变动的业务解耦出来,交给RuleGo规则链管理。业务需求变动不需要重启主程序。
  • 复杂业务编排: 把业务封装成自定义组件,通过RuleGo编排和驱动这些自定义组件,支持动态调整和替换业务逻辑。
  • 微服务编排: 通过RuleGo编排和驱动微服务,或者动态调用第三方服务处理业务并返回结果。
  • 业务代码与逻辑解耦: 例如用户积分系统、风控系统。
  • 自动化: 例如CI/CD系统、流程自动化系统、营销自动化系统。
  • 低代码: 例如低代码平台、iPaaS系统、ETL、类似LangFlow系统(对接大模型提取用户意图,然后触发规则链与其他系统交互或处理业务)。

架构图

RuleGo架构图

规则链运行示例图

更多运行模式

安装

使用 go get 命令安装 RuleGo

go get github.com/rulego/rulego
# 或
go get gitee.com/rulego/rulego

使用

RuleGo 使用极其简单,只需3步:

  1. 使用JSON定义规则链:

  2. 导入RuleGo包并使用规则链定义创建规则引擎实例:

import "github.com/rulego/rulego"
//加载规则链定义文件
ruleFile := fs.LoadFile("chain_call_rest_api.json")

  1. 把消息payload、消息类型、消息metadata交给规则引擎实例处理,然后规则引擎就会根据规则链的定义处理消息:
//定义消息metadata
metaData := types.NewMetadata()
metaData.PutValue("productType", "test01")
//定义消息payload和消息类型
msg := types.NewMsg(0, "TELEMETRY_MSG", types.JSON, metaData, "{\"temperature\":35}")

实时更新规则链逻辑而无需重启应用

规则引擎管理API

  • 动态更新规则链
//动态更新规则链逻辑
err := ruleEngine.ReloadSelf(ruleFile)
//更新规则链下某个节点
ruleEngine.ReloadChild("node01", nodeFile)
//获取规则链定义
ruleEngine.DSL()

  • 规则引擎实例管理:
//加载文件夹所有规则链定义到规则引擎池
rulego.Load("/rules", rulego.WithConfig(config))
//通过ID获取已经创建的规则引擎实例
ruleEngine, ok := rulego.Get("rule01")

//创建默认配置
config := rulego.NewConfig()
//调试节点回调函数,节点配置必须设置debugMode:true才会触发调用
//节点进入和离开信息都会回调该函数
config.OnDebug = func (chainId,flowType string, nodeId string, msg types.RuleMsg, relationType string, err error) {
}

规则链定义DSL

规则链定义DSL

规则链节点组件

RuleGo 的核心特性是组件化架构,所有业务逻辑都封装在组件中,可以灵活配置和复用。目前, RuleGo 已内置大量常用组件。

数据集成

RuleGo 提供Endpoint模块,用于异构系统的统一数据接入与处理。详情参考:Endpoint

输入端点组件

RuleGo-Server

我们基于RuleGo提供了开箱即用的自动化工作流平台:RuleGo-Server , 以及前端可视化编辑器:RuleGo-Editor

性能

RuleGo 在初始化阶段完成大部分工作,因此运行规则链几乎不会给系统增加额外开销,资源消耗极低,特别适合运行在边缘服务器上。 另外RuleGo使用有向无环图(DAG)来表示规则链,每个输入消息只需要沿着图中的路径进行处理,而不需要匹配所有规则,这大大提高了消息处理和路由的效率,同时也节省了系统资源。

性能测试用例:

机器:树莓派2 (900MHz Cortex-A7*4,1GB LPDDR2)  
数据大小:260B   
规则链:JS脚本过滤->JS复杂转换->HTTP推送   
测试结果:100并发和500并发,内存消耗变化不大,在19M左右

更多性能测试用例

生态

贡献

欢迎任何形式的贡献,包括提交问题、建议、文档、测试或代码。贡献指南

许可证

RuleGo 使用Apache 2.0许可证,详情请参阅LICENSE文件。

联系我们

邮箱:rulego@outlook.com