【回顾】一个基于 Go 语言的轻量级、高性能、嵌入式规则引擎

共 4761字,需浏览 10分钟

 ·

2024-04-12 00:04

关注 "GitHub精选",设为 "星标"
探索有意思的开源项目

大家好,又见面了,我是 GitHub 精选君!

背景介绍

在处理大量数据时,我们经常需要对数据进行聚合、分发、过滤、转换、丰富和执行各种操作。而 RuleGo 是一个基于 Go 语言的轻量级、高性能、嵌入式规则引擎,可以帮助我们解决这些问题。它可以在低成本设备上高效地处理和链接数据,适用于物联网边缘计算。同时,RuleGo 还是一个灵活、高度可定制的事件处理框架,可以满足高度个性化或频繁变化的业务场景需求。

用一句话介绍 RuleGo 项目就是:“RuleGo is a lightweight, high-performance, embedded rule engine based on Go language. It can aggregate, distribute, filter, transform, enrich and execute various actions on input messages.”。

项目介绍

RuleGo 是一个基于编排的规则引擎,最擅长解耦系统。它采用协程池和对象池等技术,结合 Go 语言的高性能特性,可以在10W 数据处理 JS 脚本过滤-> JS 脚本数据处理-> HTTP 推送的情况下,平均处理时间为 9 秒。同时,RuleGo 支持将自己嵌入到现有项目中,非侵入式地利用其特性。所有业务逻辑都是组件化的,可以灵活配置和重用。你可以灵活地组合和重用不同的组件,以实现高度可定制和可扩展的业务流程。支持规则链的动态编排,你可以将你的业务封装成 RuleGo 组件,通过构建块实现高度变化的业务需求。

同时,RuleGo 提供了丰富灵活的扩展接口和钩子,如:自定义组件、组件注册管理、规则链 DSL 解析器、协程池、规则节点消息流入/流出回调、规则链处理结束回调等。支持通过 Go 插件动态加载组件和扩展组件。内置常用组件包括:消息类型切换、JavaScript 切换、JavaScript 过滤器、JavaScript 转换器、HTTP 推送、MQTT 推送、发送电子邮件、日志记录等组件。你也可以自己扩展其他组件。同时,RuleGo 还具有可靠的上下文隔离机制,无需担心高并发情况下的数据流问题。

如何使用

你可以通过以下步骤安装和使用 RuleGo:

1、安装 Go 语言环境

2、执行命令:go get github.com/rulego/rulego

3、在你的代码中引入 RuleGo 包

4、编写规则链,进行业务处理

对于以上链式调用关系,可以用如下 JSON DSL 进行描述。

{
  "ruleChain": {
    "name": "Test rule chain",
    "root": true,
    "debugMode": false
  },
  "metadata": {
    "nodes": [
      {
        "id": "s1",
        "type": "jsFilter",
        "name": "Filtering Data",
        "debugMode": true,
        "configuration": {
          "jsScript": "return msg!='bb';"
        }
      },
      {
        "id": "s2",
        "type": "jsTransform",
        "name": "Transform Data",
        "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": "Call Rest Api Push Data",
        "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"
      }
    ],
    "ruleChainConnections": null
  }
}

如果你想了解更多使用方法,可以参考项目文档中的示例代码。

项目推介

RuleGo是一个非常优秀的开源项目,它的开发活跃度很高,已经获得了很多开发者的认可和使用。它还被一些知名公司和业内知名人士推荐使用。如果你需要一个高性能、灵活、可定制的规则引擎,RuleGo 将是一个非常好的选择。

以下是该项目 Star 趋势图(代表项目的活跃程度):

更多项目详情请查看如下链接。

开源项目地址:https://github.com/rulego/rulego

开源项目作者:rulego

关注我们,一起探索有意思的开源项目。

点击如下卡片后台回复:加群与技术极客们一起交流人工智能、开源项目,一起成长。

点击支持一下吧

浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报