ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java 开发者上手 Ice:从零编写第一个自定义叶子节点

Java 开发者上手 Ice:从零编写第一个自定义叶子节点 Java 开发者上手 Ice从零编写第一个自定义叶子节点【免费下载链接】iceRule engine/process engine, committed to solving flexible and complex hard-coded problems, for complex/flexibly changing business, provide a new abstract orchestration solution that is lightweight, high-performance and provides visual operation pages. Java规则引擎-ice针对复杂/灵活变动业务提供一个新的抽象编排解决方案轻量级高性能并提供可视化操作页面项目地址: https://gitcode.com/gh_mirrors/ice6/ice如果你的业务里到处是if / else和写死的判断逻辑改一次需求就要动一次代码那么 Ice 这款轻量级、高性能的Java 规则引擎值得你了解一下。Ice 把业务流程抽象成节点编排并通过可视化操作页面灵活配置。而自定义叶子节点正是你接入 Ice 的第一步——本文用三个实战示例带你从零写透它。什么是 Ice 叶子节点先从三种基类说起Ice 的节点分为关系节点负责编排分支和叶子节点负责具体执行。我们通常要扩展的就是叶子节点。Ice 在sdks/java/ice-core/src/main/java/com/ice/core/leaf/base/下提供了三个抽象基类对应三种业务场景基类需实现的方法适用场景执行结果BaseLeafFlowdoFlow(roam)返回boolean条件判断、流程控制TRUE / FALSEBaseLeafResultdoResult(roam)返回boolean执行动作发券、扣款、推送TRUE / FALSEBaseLeafNonedoNone(roam)无返回值日志、探针、埋点等只做不判NONE三者都继承自BaseLeaf并统一通过processNode被引擎调度。选择哪个基类取决于你的节点是否需要影响流程走向。环境准备如何快速引入 Ice首先获取源码与示例工程git clone https://gitcode.com/gh_mirrors/ice6/ice在官方测试工程tests/java/ice-test/ice-test-3x/中已经搭好了 Spring Boot Ice 的完整骨架。你只需在pom.xml中引入ice-core依赖即可开始编写节点。实战一编写第一个结果叶子节点最常见的需求是当流程走到某个节点时执行一个业务动作。比如给用户发放余额。参考官方示例tests/java/ice-test/ice-test-3x/src/main/java/com/ice/test/result/AmountResult.java一个结果叶子节点长这样IceNode(name 发放余额节点, desc 用于发放余额) public class AmountResult extends BaseLeafResult { Autowired private SendService sendService; IceField(name 发给谁, desc 发放的key 如uid) private String key; IceField(name 发多少, desc 发多少余额 如5) private double value; Override protected boolean doResult(IceRoam roam) { Number uid roam.getDeep(key); if (uid null || value 0) { return false; } boolean res sendService.sendAmount(uid.intValue(), value); roam.put(SEND_AMOUNT, res); return res; } }只需三步继承BaseLeafResult、用IceNode声明节点信息、实现doResult方法。它运行在 Spring 容器中所以可以直接Autowired注入你的 Service。实战二编写流程判断叶子节点当叶子节点用于条件分支时继承BaseLeafFlow。示例工程里的tests/java/ice-test/ice-test-3x/src/main/java/com/ice/test/flow/ScoreFlow.java就是一个分数门槛判断节点public class ScoreFlow extends BaseLeafFlow { private double score; // 门槛分 private String key; // 读取哪个字段 Override protected boolean doFlow(IceRoam roam) { Number value roam.getDeep(key); if (value null) { return false; } return value.doubleValue() score; } }返回true走真分支返回false走假分支。把它挂在关系节点如All、Any下就能组合出任意复杂的判断逻辑而不再需要改 Java 代码。实战三编写无返回值叶子节点有些节点只做副作用不关心成败比如打日志、发埋点。这类节点继承BaseLeafNone官方示例tests/java/ice-test/ice-test-3x/src/main/java/com/ice/test/none/RoamProbeLogNone.java是很有用的调试利器——把整个 roam 上下文打印出来IceNode(name roam探针日志节点, desc 用于探测roam中的值) public class RoamProbeLogNone extends BaseLeafNone { IceField(name 探针, desc 探针为空则打印整个roam) private String key; Override protected void doNone(IceRoam roam) { if (StringUtils.hasLength(key)) { log.info(probe key:{} :{}, key, JacksonUtils.toJsonString(roam.getDeep(key))); } else { log.info(probe :{}, JacksonUtils.toJsonString(roam)); } } }排查流程问题时在可疑位置挂一个探针节点就能瞬间看清上下文数据比断点调试高效得多。让节点可配置IceNode 与 IceField 注解Ice 的精髓在于可视化配置而这两个注解就是节点与页面之间的桥梁IceNode标注在类上name是节点在页面展示的名称desc是说明alias可以配置多语言兼容别名。参考sdks/java/ice-core/src/main/java/com/ice/core/annotation/IceNode.java。IceField标注在字段上name/desc会渲染成配置表单的标签与提示type可指定字段类型。参考sdks/java/ice-core/src/main/java/com/ice/core/annotation/IceField.java。IceIgnore则用于忽略不想暴露的字段。这样你的节点上线后业务同学就能在可视化页面上直接填写发给谁发多少无需任何代码改动。通过 IceRoam 上下文传递业务数据所有节点共享一个IceRoam对象见sdks/java/ice-core/src/main/java/com/ice/core/context/IceRoam.java它本质是一个ConcurrentHashMap并提供了两个宝藏方法getDeep(user.uid)用点号分隔的路径取值支持嵌套 Map 和 ListputDeep(user.uid, value)同理写入深层路径。上游节点写入的数据下游节点随时可取实现了节点间的数据流转。这就是编排的数据基础。调用引擎让叶子节点跑起来节点写好后在业务入口通过Ice类触发执行见sdks/java/ice-core/src/main/java/com/ice/core/Ice.javaIceRoam roam IceRoam.create(orderScene); roam.put(uid, 10001); Ice.processSingle(roam); // 同步执行取单个结果Ice.syncProcess同步执行全部节点Ice.asyncProcess则异步执行并返回Future。搭配测试工程中的IceFileClient你还可以把流程配置放到文件中加载、热更新随时调整规则。结语从选择基类、实现方法到注解声明、数据流转、引擎调用你已经掌握了在 Ice 规则引擎中编写自定义叶子节点的完整链路。接下来不妨试着把项目里最顽固的一段硬编码逻辑抽成几个叶子节点用可视化编排去替代它们——你会发现业务变更从此不再是一场代码发布会。相关源码位置参考叶子节点基类sdks/java/ice-core/src/main/java/com/ice/core/leaf/base/注解定义sdks/java/ice-core/src/main/java/com/ice/core/annotation/完整示例工程tests/java/ice-test/ice-test-3x/src/main/java/com/ice/test/【免费下载链接】iceRule engine/process engine, committed to solving flexible and complex hard-coded problems, for complex/flexibly changing business, provide a new abstract orchestration solution that is lightweight, high-performance and provides visual operation pages. Java规则引擎-ice针对复杂/灵活变动业务提供一个新的抽象编排解决方案轻量级高性能并提供可视化操作页面项目地址: https://gitcode.com/gh_mirrors/ice6/ice创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表