RuleGo - 一個基於 Go 語言的輕量級、高性能、嵌入式規則引擎

背景介紹

在處理大量數據時,我們經常需要對數據進行聚合、分發、過濾、轉換、豐富和執行各種操作。而 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

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/GMzW9HiG6FKPhuVvXhRzcA