• 请不要在回答技术问题时复制粘贴 AI 生成的内容
showB1
V2EX  ›  程序员

规则引擎推荐

  •  
  •   showB1 · Jul 3, 2024 · 6555 views
    This topic created in 857 days ago, the information mentioned may be changed or developed.

    诸位好呀,我们现在有个模块需要大量的条件判断,看着写的大坨大坨的 if 。。。很头疼,想在 team 中引入。可我这块经验只在以前的风控中用过 grule 。 想调研一下,grule 、goval 、gengine 或者还有其他的吗?谁能点评一下,各有什么优劣。 团队技术栈以 go 为主,python 次之。大多数有几年 c 艹、java 经验。

    29 replies  •  2025-05-19 09:41:21 +08:00
    skiworld11
    skiworld11
    Jul 3, 2024
    3
    s-exp
    ufan0
    ufan0
    Jul 3, 2024
    4
    首先排除 drools
    R4rvZ6agNVWr56V0
    R4rvZ6agNVWr56V0
    Jul 3, 2024
    5
    轻量级的么,可以考虑一下 google cel
    iyear
    iyear
    Jul 3, 2024 via Android
    6
    expr-lang 相比各种语言虚拟机更轻,做规则引擎够用了。如果更复杂的话就考虑引入 goja ,gopher-lua 的语言实现吧
    covering
    covering
    Jul 3, 2024 via Android
    7
    把条件表格整理成二维数组,写个循环按顺序匹配。要引入新的框架,大概率 review 不好过
    xinshoushanglu
    xinshoushanglu
    Jul 3, 2024
    8
    drools 不好用,而且太老旧了。我们现在用 liteflow 嵌脚本来实现规则定制
    Desdemor
    Desdemor
    Jul 3, 2024
    9
    https://github.com/expr-lang/expr 补个楼上的链接
    kaiccc
    kaiccc
    Jul 3, 2024
    10
    liteflow 还可以,满足我们的需求
    wingoo
    wingoo
    Jul 3, 2024
    11
    记得好像 b 站有一个, 不知道有没有用过的
    好像就是 gengine, 看了下 最后更新日期 2021, 可以排掉了
    airycanon
    airycanon
    Jul 3, 2024
    13
    补充 #12 优点是可以支持复杂的语法,相当于一个简单的脚本语言了。
    mightybruce
    mightybruce
    Jul 3, 2024
    14
    我提供一个能实现各种功能,直接解释并运行 go 小段代码的 go 库,达到 go 嵌套 go 的效果
    https://github.com/traefik/yaegi

    想做什么都能达到哦, 毕竟这个是一个 go 解释库
    SilentBlade
    SilentBlade
    Jul 3, 2024
    15
    借楼问一下,java 有推荐的吗
    qfmy1991
    qfmy1991
    Jul 4, 2024 via Android
    16
    QLExpress 阿里的
    Ico945
    Ico945
    Jul 4, 2024 via iPhone
    17
    感觉自己的逻辑翻译成规则引擎 dsl 这一步也挺费劲的
    ryan961
    ryan961
    Jul 4, 2024
    19
    @mightybruce #14 哈哈,无限套娃是吗
    SmiteChow
    SmiteChow
    Jul 4, 2024
    20
    想清楚规则谁来写?能不能停机更新?如果是非开发人员写或者需要热更新,才需要规则引擎,否则建议使用程序配置文件。
    singer
    singer
    PRO
    Jul 4, 2024
    21
    golang 中的 ast 还算可用,自行定制开发其实并不会有太大的障碍。我开发 golang 规则引擎 N 年了,内部使用非常完美,但无法开源。目前没看到市面上有用着非常友好的规则引擎库,如果非得推荐一款,那就 https://github.com/bytedance/arishem 。优势在于内置的函数够多不用对底层二开。

    gengine 的并发模型,arishem 的内置函数定义,再加上自研的规则权重可能会让规则引擎更加强大。
    ychost
    ychost
    Jul 4, 2024
    22
    @mulychou java 用 groovy 最简单功能最强,其它的用 QLExpress 之类的也行
    kennir
    kennir
    Jul 7, 2024
    23
    grule 用了很久了
    showB1
    showB1
    OP
    Jul 29, 2024
    24
    @singer 听上去不错
    showB1
    showB1
    OP
    Jul 29, 2024
    25
    @kaiccc 这个只适用于 java 生态?
    showB1
    showB1
    OP
    Sep 24, 2024
    26
    @Ico945 开始动手了 ,感觉你说的对😓
    Ico945
    Ico945
    Sep 24, 2024
    27
    @showB1 我们之前用过 drools 和自研的,drools 的 dsl 是通过模板语言拼接的,可读性巨差而且后期维护成本越来越高;自研就支持自定义格式的了,我们直接支持了自定义 json 转起来就更方便了。
    ChristopherY
    ChristopherY
    Feb 26, 2025
    28
    OP 现在实现这一套规则引擎了吗?
    showB1
    showB1
    OP
    May 19, 2025
    29
    @ChristopherY 你好,好久没登录,我们用了 arishem
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   807 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 19:07 · PVG 03:07 · LAX 11:07 · JFK 14:07
    ♥ Do have faith in what you're doing.