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规则引擎的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Go语言实现远程传输文件

    使用Go语言实现远程传输文件

    本文主要介绍如何利用Go语言实现远程传输文件的功能,有需要的小伙伴们可以参考学习。下面跟着小编一起来学习学习。
    2016-08-08
  • 一文详解Golang使用接口支持Apply方法的配置模式

    一文详解Golang使用接口支持Apply方法的配置模式

    这篇文章主要为大家介绍了一文详解Golang使用接口支持Apply方法的配置模式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • golang抓取网页并分析页面包含的链接方法

    golang抓取网页并分析页面包含的链接方法

    今天小编就为大家分享一篇golang抓取网页并分析页面包含的链接方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 在Golang中使用C语言代码实例

    在Golang中使用C语言代码实例

    这篇文章主要介绍了在Golang中使用C语言代码实例,本文先是给出了一个Hello World例子、Golang 引用 C例子,并总结了一些要注意的地方,需要的朋友可以参考下
    2014-10-10
  • Go设计模式之备忘录模式讲解和代码示例

    Go设计模式之备忘录模式讲解和代码示例

    备忘录是一种行为设计模式, 允许生成对象状态的快照并在以后将其还原,本文就通过代码示例给大家讲讲Go备忘录模式,感兴趣的小伙伴跟着小编一起来看看吧
    2023-08-08
  • 基于HLS创建Golang视频流服务器的优缺点

    基于HLS创建Golang视频流服务器的优缺点

    HLS 是 HTTP Live Streaming 的缩写,是苹果开发的一种基于 HTTP 的自适应比特率流媒体传输协议。这篇文章主要介绍了基于 HLS 创建 Golang 视频流服务器,需要的朋友可以参考下
    2021-08-08
  • 深入Golang中的sync.Pool详解

    深入Golang中的sync.Pool详解

    这篇文章主要介绍了深入Golang中的sync.Pool详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 详解golang各种类型是如何进行比较的

    详解golang各种类型是如何进行比较的

    在日常开发中,比较操作是最常用的基本操作之一,可以用来判断变量之间是否相等或者对应的大小关系,比较操作对于排序、查找和集合数据结构的实现至关重要,本文将深入解析golang各种类型是如何进行比较的,需要的朋友可以参考下
    2024-01-01
  • Golang中int类型和字符串类型相互转换的实现方法

    Golang中int类型和字符串类型相互转换的实现方法

    在日常开发中,经常需要将数字转换为字符串或者将字符串转换为数字,在 Golang 中,有一些很简便的方法可以实现这个功能,接下来就详细讲解一下如何实现 int 类型和字符串类型之间的互相转换,需要的朋友可以参考下
    2023-09-09
  • Golang定时器Timer与Ticker的使用详解

    Golang定时器Timer与Ticker的使用详解

    在 Go 里有很多种定时器的使用方法,像常规的 Timer、Ticker 对象,本文主要为大家介绍了Timer与Ticker的使用,感兴趣的小伙伴可以了解一下
    2023-05-05

最新评论