【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)(三)

简介: 【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)

【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)(二)https://developer.aliyun.com/article/1471069


规则引擎RuleEngine

RuleEngine属于整个规则引擎的总体门面接口类,它主要用于操作整体的规则引擎的总体操作入口。



首先,针对于RuleEngine属于一个接口,他主要定义不同种类的规则引擎的抽象定义结构。它主要分为三个部分:RuleEngineListener-规则执行监听器,它主要作为做维护和规则引擎层面的控制监听器,获取和处理对应的RuleEngineParameter-规则引擎参数,它主要用于处理规则引擎参数将引擎级别参数进行控制对应的规则执行流程,从而进行控制对应的规则处理模式。

RuleEngineListener

该监听器与RuleListener不同,主要用于规则引擎级别的操作处理机制。它的主要作用是处理所有规则的操作,而对应的RuleListener负责处理规则内部的条件和动作操作的审计。

代码案例

java

复制代码

public interface RulesEngineListener {
    /**
     * Triggered before evaluating the rule set.
     * <strong>When this listener is used with a {@link InferenceRulesEngine},
     * this method will be triggered before the evaluation of each candidate rule
     * set in each iteration.</strong>
     *
     * @param rules to fire
     * @param facts present before firing rules
     */
    default void beforeEvaluate(Rules rules, Facts facts) { }
    /**
     * Triggered after executing the rule set
     * <strong>When this listener is used with a {@link InferenceRulesEngine},
     * this method will be triggered after the execution of each candidate rule
     * set in each iteration.</strong>
     *
     * @param rules fired
     * @param facts present after firing rules
     */
    default void afterExecute(Rules rules, Facts facts) { }
}
  • beforeEvaluate:在评估规则集之前触发。当与默认的 RulesEngine 一起使用时,该方法将在每次迭代中在评估每个候选规则集之前触发。
  • afterExecute:在执行规则集后触发。当此监听器与默认规则引擎一起使用时,在每次迭代中执行完每个候选规则集后都会触发此方法。

代码案例

java

复制代码

public interface RulesEngine {
    /**
     * Return the rules engine parameters.
     *
     * @return The rules engine parameters
     */
    RulesEngineParameters getParameters();
    /**
     * Return the list of registered rule listeners.
     *
     * @return the list of registered rule listeners
     */
    default List<RuleListener> getRuleListeners() {
        return Collections.emptyList();
    }
    /**
     * Return the list of registered rules engine listeners.
     *
     * @return the list of registered rules engine listeners
     */
    default List<RulesEngineListener> getRulesEngineListeners() {
        return Collections.emptyList();
    }
    /**
     * Fire all registered rules on given facts.
     */
    void fire(Rules rules, Facts facts);
    /**
     * Check rules without firing them.
     * @return a map with the result of evaluation of each rule
     */
    default Map<Rule, Boolean> check(Rules rules, Facts facts) {
        return Collections.emptyMap();
    }
}

RulesEngineParameters

RulesEngineParameters的参数模型主要用于以下的几种类型:

  • skipOnFirstAppliedRule:应用规则时跳过下一条适用规则的参数。
  • skipOnFirstNonTriggeredRule:当某条规则未触发时,跳过下一条适用规则的参数
  • skipOnFirstFailedRule:当一条规则失效时,跳过下一条适用规则的参数。
  • priorityThreshold: 如果优先级超过用户定义的阈值,则跳过下一条规则的参数。

java

复制代码

public class RulesEngineParameters {
    /**
     * Default rule priority threshold.
     */
    public static final int DEFAULT_RULE_PRIORITY_THRESHOLD = Integer.MAX_VALUE;
    
    /**
     * Parameter to skip next applicable rules when a rule is applied.
     */
    private boolean skipOnFirstAppliedRule;
    /**
     * Parameter to skip next applicable rules when a rule is non triggered
     */
    private boolean skipOnFirstNonTriggeredRule;
    /**
     * Parameter to skip next applicable rules when a rule has failed.
     */
    private boolean skipOnFirstFailedRule;
    /**
     * Parameter to skip next rules if priority exceeds a user defined threshold.
     */
    private int priorityThreshold;
    /**
     * Create a new {@link RulesEngineParameters} with default values.
     */
    public RulesEngineParameters() {
        this.priorityThreshold = RulesEngineParameters.DEFAULT_RULE_PRIORITY_THRESHOLD;
    }
    /**
     * Create a new {@link RulesEngineParameters}.
     *
     * @param skipOnFirstAppliedRule parameter to skip next applicable rules on first applied rule.
     * @param skipOnFirstFailedRule parameter to skip next applicable rules on first failed rule.
     * @param skipOnFirstNonTriggeredRule parameter to skip next applicable rules on first non triggered rule.
     * @param priorityThreshold threshold after which rules should be skipped.
     */
    public RulesEngineParameters(final boolean skipOnFirstAppliedRule, final boolean skipOnFirstFailedRule, final boolean skipOnFirstNonTriggeredRule, final int priorityThreshold) {
        this.skipOnFirstAppliedRule = skipOnFirstAppliedRule;
        this.skipOnFirstFailedRule = skipOnFirstFailedRule;
        this.skipOnFirstNonTriggeredRule = skipOnFirstNonTriggeredRule;
        this.priorityThreshold = priorityThreshold;
    }
    public int getPriorityThreshold() {
        return priorityThreshold;
    }
    public void setPriorityThreshold(final int priorityThreshold) {
        this.priorityThreshold = priorityThreshold;
    }
    public RulesEngineParameters priorityThreshold(final int priorityThreshold) {
        setPriorityThreshold(priorityThreshold);
        return this;
    }
    public boolean isSkipOnFirstAppliedRule() {
        return skipOnFirstAppliedRule;
    }
    public void setSkipOnFirstAppliedRule(final boolean skipOnFirstAppliedRule) {
        this.skipOnFirstAppliedRule = skipOnFirstAppliedRule;
    }
    public RulesEngineParameters skipOnFirstAppliedRule(final boolean skipOnFirstAppliedRule) {
        setSkipOnFirstAppliedRule(skipOnFirstAppliedRule);
        return this;
    }
    public boolean isSkipOnFirstNonTriggeredRule() {
        return skipOnFirstNonTriggeredRule;
    }
    public void setSkipOnFirstNonTriggeredRule(final boolean skipOnFirstNonTriggeredRule) {
        this.skipOnFirstNonTriggeredRule = skipOnFirstNonTriggeredRule;
    }
    public RulesEngineParameters skipOnFirstNonTriggeredRule(final boolean skipOnFirstNonTriggeredRule) {
        setSkipOnFirstNonTriggeredRule(skipOnFirstNonTriggeredRule);
        return this;
    }
    public boolean isSkipOnFirstFailedRule() {
        return skipOnFirstFailedRule;
    }
    public void setSkipOnFirstFailedRule(final boolean skipOnFirstFailedRule) {
        this.skipOnFirstFailedRule = skipOnFirstFailedRule;
    }
    public RulesEngineParameters skipOnFirstFailedRule(final boolean skipOnFirstFailedRule) {
        setSkipOnFirstFailedRule(skipOnFirstFailedRule);
        return this;
    }
    @Override
    public String toString() {
        return "Engine parameters { " +
                "skipOnFirstAppliedRule = " + skipOnFirstAppliedRule +
                ", skipOnFirstNonTriggeredRule = " + skipOnFirstNonTriggeredRule +
                ", skipOnFirstFailedRule = " + skipOnFirstFailedRule +
                ", priorityThreshold = " + priorityThreshold +
                " }";
    }
}

fire触发操作入口

EasyRule是一个规则引擎库,它提供了一种方便的方法来处理规则和事实的关联。在EasyRule中,fire(Rules rules, Facts facts)是一个方法,用于触发并执行一组规则。

java

复制代码

void fire(Rules rules, Facts facts);

这个方法需要两个参数:

  • rules:规则集合,它包含了需要执行的规则。
  • facts:事实集合,它包含了给定的事实,这些事实将被用于匹配规则的条件。

当调用fire(Rules rules, Facts facts)方法时,规则引擎会对每个规则进行逐个匹配。如果某个规则的条件能够与给定的事实相匹配,那么该规则的操作将被执行。

换句话说,fire(Rules rules, Facts facts)方法将根据给定的事实启动所有符合条件的规则,以便执行规则中定义的操作。

下节预告

接下来,我们会进行介绍和说明对应的“【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(核心层实现设计)”,敬请期待。

相关文章
|
6月前
|
JSON 安全 Java
API 一键转换 MCP 服务!Higress 助今日投资快速上线 MCP 市场
今日投资的技术负责人介绍了如何通过Higress MCP 市场完善的解决方案,快捷地将丰富的金融数据 API 转化为 MCP 工具,帮助用户通过 MCP 的方式非常轻松地调用专业金融数据,自由快速地构建自己的金融大模型应用。
827 23
|
6月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
4月前
|
JSON API 调度
Midjourney 技术拆解与阿里云开发者实战指南:从扩散模型到 API 批量生成
Midjourney深度解析:基于优化Stable Diffusion,实现文本到图像高效生成。涵盖技术架构、扩散模型原理、API调用、批量生成系统及阿里云生态协同,助力开发者快速落地AIGC图像创作。
651 0
|
4月前
|
人工智能 API 监控
告别多接口拼凑!阿里云 API 模型聚合实现技术能力协同跃迁
API聚合整合400+国内外AI模型,统一接口、屏蔽差异,降低开发与维护成本,提升效率与系统稳定性,助力开发者高效应对多API调用困境。
498 0
|
4月前
|
数据采集 API
京东:调用用户行为API分析购买路径,优化页面跳转逻辑
京东通过整合用户行为API,构建购买路径分析体系,运用马尔可夫链模型识别高损耗、断裂与冗余路径,优化页面跳转逻辑。实施流程合并、预加载及实时干预策略,转化率提升30.2%,路径缩短34.9%,跳转失败率下降78.7%,实现数据驱动的精细化运营。
384 0
|
4月前
|
人工智能 前端开发 测试技术
Kimi K2 模型更新,带来更强的代码能力、更快的 API
今天,Kimi K2 模型的最新版本 0905 开源发布,进一步提升其在真实编程任务中的表现
1152 0
|
5月前
|
安全 API 区块链
数据资产化新范式:API如何重构企业增长逻辑?
在数字经济时代,数据已成为企业核心资产,而API作为连接数据与业务的桥梁,正驱动企业释放数据价值、实现业务增长。本文通过电商、金融、医疗与政务领域的典型案例,解析API如何助力企业提升效率、优化服务、拓展生态,并探讨其商业价值实现路径与未来趋势。
数据资产化新范式:API如何重构企业增长逻辑?
|
6月前
|
API
本地用阿里云API调用的r1模型,返回的think字段中有奇怪的东西,并且停止思考
这两张图片展示了模型生成内容时可能出现的异常情况,包括图像模糊、结构错误或不符合预期的结果。这可能是由于模型训练数据不足、输入指令不清晰或模型本身存在局限性所致。建议优化输入提示词或调整模型参数以提升输出质量。
|
5月前
|
人工智能 算法 API
国产化用于单导联和六导联的心电算法及API服务
随着智能设备普及,心电图功能逐渐应用于智能手表、体脂仪等设备。苏州唯理推出单导联及6导联心电算法API服务,由AI驱动,1分钟内快速评估心律失常、房颤、早搏等问题,已广泛用于医疗设备及三甲医院。其算法还可评估压力、疲劳、情绪状态,筛查效率远超进口设备。唯理率先实现国产医疗级心电芯片,支持快速集成与私有化部署,适用于多种智能硬件。
|
6月前
|
缓存 安全 前端开发
3个月GMV破5000万:揭秘某家居品牌靠API接口逆袭的底层逻辑
本文详解如何利用电商API从零搭建定制化商城,涵盖需求分析、技术选型、开发流程与安全优化,并结合实战案例,助力中小商家突破竞争,实现高效电商转型。