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
  • 简体中文

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

    • 简介
    • 使用场景
    • 快速开始
      • 安装
      • 使用
      • 其他
      • 小结
    • 动态刷新规则链
  • 规则链

  • 标准组件

  • 扩展组件

  • 自定义组件

  • 组件市场

  • 可视化

  • AOP

  • 触发器

  • 高级主题

  • RuleGo-Server

  • 问题

目录

快速开始

# 安装

使用go get命令安装RuleGo:

go get github.com/rulego/rulego
1

# 使用

首先使用Json格式定义规则链。规则链的定义不需要学习特定的规则语法或者DSL,只需配置组件,并把他们通过一定的关系连接起来,即可实现你的功能需求。参考规则链

RuleGo 使用极其简单和轻量级。只需以下2步:

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

以下示例是一个简单的规则链定义,它包含一个过滤器、一个转换器、一个推送数据组件, 它会过滤掉设备ID为aa的设备数据,并对数据进行转换,然后把设备ID为aa的设备数据推送到远程服务器。

import "github.com/rulego/rulego"
var ruleFile=`{
{
  "ruleChain": {
    "id":"chain_call_rest_api",
    "name": "测试规则链",
    "root": true
  },
  "metadata": {
    "nodes": [
      {
        "id": "s1",
        "type": "jsFilter",
        "name": "过滤",
        "debugMode": true,
        "configuration": {
          "jsScript": "return msg.deviceId=='aa';"
        }
      },
      {
        "id": "s2",
        "type": "jsTransform",
        "name": "转换",
        "debugMode": true,
        "configuration": {
          "jsScript": "msg.temperature=msg.temperature/10; return {'msg':msg,'metadata':metadata,'msgType':msgType};"
        }
      },
      {
        "id": "s3",
        "type": "restApiCall",
        "name": "推送数据",
        "debugMode": true,
        "configuration": {
          "restEndpointUrlPattern": "http://192.168.1.1:9099/api/msg",
          "requestMethod": "POST",
          "maxParallelRequestsCount": 200
        }
      }
    ],
    "connections": [
      {
        "fromId": "s1",
        "toId": "s2",
        "type": "True"
      },
      {
        "fromId": "s2",
        "toId": "s3",
        "type": "Success"
      }
    ]
  }
}
}
`
//使用规则链定义,创建一个规则引擎实例
ruleEngine, err := rulego.New("rule01", []byte(ruleFile))
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
55
56
57
58
  1. 把消息交给规则引擎实例处理(消息包括:消息负荷、消息类型、消息元数据等),然后规则引擎就会根据规则链的定义处理消息:
//定义消息元数据
metaData := types.NewMetadata()
metaData.PutValue("productType", "test01")

//定义消息负荷和消息类型
msg := types.NewMsg(0, "telemetry_msg", types.JSON, metaData, "{\"deviceId\":\"aa\",\"temperature\":290}")
//把消息交给规则引擎处理
ruleEngine.OnMsg(msg)

//继续处理消息,并通过回调函数得到规则链处理结果
msg = types.NewMsg(0, "telemetry_msg", types.JSON, metaData, "{\"deviceId\":\"bb\",\"temperature\":310}", types.WithOnEnd(
	func(ctx types.RuleContext, msg types.RuleMsg, err error, relationType string) {
        fmt.Println(msg.Data)//得到处理结果
}))
ruleEngine.OnMsg(msg)

//处理设备告警类型消息
msg = types.NewMsg(0, "device_alarm", types.JSON, metaData, "{\"deviceId\":\"bb\",\"alarm\":1}")
ruleEngine.OnMsg(msg)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

规则链支持动态热更新:

//通过规则链ID获取已经创建的规则引擎实例
ruleEngine, ok := rulego.Get("rule01")
//更新规则链,可以修改现有节点配置、添加、删除节点以及他们的连接关系
updateRuleChainFile:=`{
//...其他配置不变化
//变更节点s2 把温度温度加5
 {
        "id": "s2",
        "type": "jsTransform",
        "name": "转换",
        "debugMode": true,
        "configuration": {
          "jsScript": "msg.temperature=msg.temperature/10+5; return {'msg':msg,'metadata':metadata,'msgType':msgType};"
        }
      }
//...其他配置和连接不变化
}
`
//热更新规则引擎实例
_ = ruleEngine.ReloadSelf([]byte(updateRuleChainFile))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 其他

  1. 我们内置了大量的标准组件 和 扩展组件 ,你只需要通过配置的方式组合这些组件,实现你的功能需求。
  2. 你也可以很容易地开发自己的组件,参考 自定义组件 。
  3. 我们也提供了一个可独立部署轻量级的规则引擎服务 ,可以让你不需要写代码,只要编写规则链,实现你的需求。支持通过HTTP接口执行规则链。

# 小结

RuleGo 使用极其简单和轻量级。只需以下2步:

  • 1.使用Json格式的规则链定义业务逻辑,并根据该规则链初始化规则引擎。
  • 2.然后把消息或者事件交给规则引擎实例,每条消息或者事件就会按照规则链定义的逻辑进行处理,规则链支持热更新。

RuleGo 虽然轻但很强大,我们继续阅读其他章节往下探索......

在 GitHub 上编辑此页 (opens new window)
上次更新: 2025/03/31, 01:52:11
使用场景
动态刷新规则链

← 使用场景 动态刷新规则链→

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

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