面试自研流程引擎

image

 

image

 

image

 

image

  1.  提供三类条件引擎:SpEL 表达式、Groovy 动态脚本、外部接口条件,支持复杂分支和优先级路由。

    1. 解决问题:节点在一对多的的时候,我们要进行复杂分支和优先级路由,这时我们可以在配置页面通过不同语言的脚本解决这个问题。

      1. 一、三类条件引擎的含义

        1. SpEL 表达式(Spring Expression Language)

        • 是什么:Spring 框架提供的轻量级表达式语言,可以在运行时求值字符串形式的表达式(例如 #order.amount > 1000 && #user.level == 'VIP')。

        • 特点

          • 与 Java 对象无缝集成:直接读取对象的属性、调用方法、访问集合。

          • 性能较好:解析后的表达式会被缓存,适合高频、低延迟的场景。

          • 安全可控:可以通过 SimpleEvaluationContext 限制功能(比如禁止执行 Java 类静态方法),避免注入攻击。

        • 典型用途:配置化简单规则(如优惠门槛、风控条件),无需重启服务即可修改表达式。

        2. Groovy 动态脚本

        • 是什么:一种运行在 JVM 上的动态语言,支持完整的脚本化编程(可以写条件、循环、甚至调用外部服务)。

        • 特点

          • 能力远强于 SpEL:能实现复杂计算、临时数据处理、工具类调用,甚至可以引入第三方库。

          • 热加载:脚本字符串可动态编译、执行、卸载,非常适合频繁变更的业务逻辑。

          • 性能弱于 SpEL:每次执行需编译(可缓存 Script 对象优化),但仍比原生 Java 稍慢。

        • 典型用途:复杂但变更频繁的规则(例如动态计算运费、积分兑换算法),或需要业务人员通过后台界面编辑脚本的场景。

        3. 外部接口条件

        • 是什么:把条件判断的逻辑外移到独立的微服务或 HTTP API 中,规则引擎只负责调用接口并根据返回结果(true/false 或具体值)进行路由。

        • 特点

          • 解耦最彻底:规则逻辑独立部署,可以跨语言、跨团队维护。

          • 支持异步/大数据量:接口内部可以查数据库、跑模型、甚至人工审核。

          • 有网络开销:需考虑超时、重试、熔断,不适合极高吞吐的实时判断。

        • 典型用途:需要复用已有业务接口(如用户风控评分、黑名单检查),或规则依赖机器学习模型、外部数据源。


        二、如何支持复杂分支和优先级路由

        面试官更关心的往往是组合设计,而不是单一概念。

        • 复杂分支
          一个决策节点往往有多个出口(例如 条件A → 节点1条件B → 节点2else → 节点3)。三类引擎都能返回布尔值或枚举值,配合规则链(Rule Chain)或决策表(Decision Table)即可实现多分支。

        • 优先级路由
          规则按优先级排序,从高到低依次匹配。命中某条规则后,可继续或终止。

          • SpEL / Groovy 适合执行优先级冲突的快速匹配

          • 外部接口可以作为高优先级特殊规则(例如VIP用户先走外部特权校验),或者作为最后兜底规则(例如查询风控中心)。

        组合使用示例

        text
        规则引擎入口:
        1. 优先调用外部接口(检查是否黑名单) → 命中则拒绝
        2. 再匹配 Groovy 脚本规则(例如“最近7天退款次数>3”) → 命中则转人工审核
        3. 最后用 SpEL 表达式处理普通业务规则(金额满减、会员等级折扣)

posted @ 2026-06-07 22:44  飘来荡去evo  阅读(22)  评论(0)    收藏  举报