Go语言轻量级高性能嵌入式规则引擎RuleGo使用详解

 更新时间:2023年11月17日 09:34:58   作者:GitHub精选  
这篇文章主要为大家介绍了Go语言轻量级高性能嵌入式规则引擎RuleGo使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

背景介绍

在处理大量数据时,我们经常需要对数据进行聚合、分发、过滤、转换、丰富和执行各种操作。而 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

以上就是Go语言轻量级高性能嵌入式规则引擎RuleGo使用详解的详细内容,更多关于Go RuleGo规则引擎的资料请关注脚本之家其它相关文章!

相关文章

  • 浅析Golang中make和new的用法区别

    浅析Golang中make和new的用法区别

    在Go语言中,有两个比较雷同的内置函数,分别是new和make方法,二者都可以用来分配内存,那他们有什么区别呢?下面就跟随小编一起来学习一下吧
    2024-02-02
  • Go语言程序查看和诊断工具详解

    Go语言程序查看和诊断工具详解

    这篇文章主要为大家详细介绍了Go语言程序查看和诊断工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • go编译标签build tag注释里语法详解

    go编译标签build tag注释里语法详解

    这篇文章主要为大家介绍了go编译标签build tag注释里语法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 详解Golang函数式选项(Functional Options)模式

    详解Golang函数式选项(Functional Options)模式

    什么是函数式选项模式,为什么要这么写,这个编程模式解决了什么问题呢?其实就是为了解决动态灵活的配置不同的参数的问题。下面通过本文给大家介绍Golang函数式选项(Functional Options)模式的问题,感兴趣的朋友一起看看吧
    2021-12-12
  • Go语言开发发送Get和Post请求的示例

    Go语言开发发送Get和Post请求的示例

    这篇文章主要介绍了Go语言开发发送Get和Post请求的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Go语言协程处理数据有哪些问题

    Go语言协程处理数据有哪些问题

    协程(coroutine)是Go语言中的轻量级线程实现,由Go运行时(runtime)管理。本文为大家详细介绍了Go中的协程,协程不需要抢占式调度,可以有效提高线程的任务并发性,而避免多线程的缺点
    2023-02-02
  • Golang使用gofumpt进行代码格式化

    Golang使用gofumpt进行代码格式化

    这篇文章主要为大家详细介绍了Golang如何使用gofumpt进行代码格式化,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • Golang语言使用像JAVA Spring注解一样的DI和AOP依赖注入实例

    Golang语言使用像JAVA Spring注解一样的DI和AOP依赖注入实例

    这篇文章主要为大家介绍了Golang语言使用像JAVA Spring注解一样的DI和AOP依赖注入实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 详解Go语言设计模式之单例模式

    详解Go语言设计模式之单例模式

    单例模式很容易记住。就像名称一样,它只能提供对象的单一实例,保证一个类只有一个实例,并提供一个全局访问该实例的方法。本文就来聊聊Go语言中的单例模式,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Go语言从单体服务到微服务设计方案详解

    Go语言从单体服务到微服务设计方案详解

    这篇文章主要为大家介绍了Go语言从单体服务到微服务设计方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论