详解:Drools规则引擎探究以及在IOT的应用

使用Drools规则引擎实现业务规则灵活管理
本文介绍了如何利用Drools规则引擎解决复杂业务场景中的规则管理问题,通过实例展示了在天猫奢品业务中,如何利用Drools将活动规则与代码解耦,实现规则的动态调整,从而提高系统的灵活性和可维护性。文章详细讲解了Drools的工作原理,包括Rete算法,以及Drools的核心优势和使用方法。

前言:我上家公司是做物联网的,任职在IOT部门,业务上针对不同类型的燃气表,水表,报警器等有不同协议,其中又包含不同厂家的表和自己公司的表。针对不同的协议,如何解析不同的协议头帧,根据头帧进行不同的复杂业务处理,后来引入了Drools规则引擎,通过规则的逻辑和数据的分离以及可扩展解决问题。

目前所处为淘系技术部负责天猫奢品的业务,业务背景如下:业务包含天猫奢品频道,奢品折扣频道,天猫奢品官方直营旗舰店,魅力惠旗舰店,魅力惠APP等。基于业务场景下会员分为店铺会员,APP会员,天猫奢品行业会员等,而业务需要进行会员精细化的运营,通过不同的会员等级享受不同的权益,而相同的等级还需要做到根据偏好做到千人多权,如何根据复杂的业务需求变化更加精准的进行匹配,考虑Drools规则的逻辑数据的分离和可扩展性,接下来也会在天猫奢品的相关的会员模块中和组内成员探讨是否适合引入。下面是一些基于业务场景的总结和分享。

引入


▐  问题引入

天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品。假如业务方给的规则如下:

主刃同学一看,这需求果然简单呀,作为团队的核心开发,这不就是小case,5分钟搞定,送赠品的简单代码如下:

public void exchangeGift(Integer points) {
        if (points < 100) {
            System.out.println("无商品");
        } else if (points > 100 && points <= 200) {
            System.out.println("Dior限量口红");
        } else if (points > 200 && points <= 300) {
            System.out.println("TF限量口红");
        } else if (points > 300 && points <= 400) {
            System.out.println("SK-II套装");
        } else if (points > 400 && points <= 500) {
            System.out.println("MCM双肩包");
        } else if (points > 500) {
            System.out.println("RADO雷达限量表");
        }
    }

活动进行了一天,运营发现Dior限量版口红被兑换的很多,即将超出预期,业务方根据实际情况想改变规则,规则要求在各个层级上各加200分从而促进更多的消费。

主刃一看改动不大,于是五分钟后修改完代码并经测试后发布上线。活动又进行了一天,运营人员通过后台监控发现提到200分后,用户达成比较少,想再现有基础上再降100分。没办法还的改不是,主刃同学这次把配置数据放入到了阿里集团的配置中心diamond中,当运营改策略的,只要改一下Diamond的值就可以了。

核心代码编程了这样:

public void exchangeGift(Integer points) {
        if (points < CommDiamondProperty.getInstance().getLevelOne()) {
            System.out.println("无商品");
        } else if (points > CommDiamondProperty.getInstance().getLevelOne() && points <= CommDiamondProperty.getInstance().getLevelTwo()) {
            System.out.println("Dior限量口红");
        } else if (points > CommDiamondProperty.getInstance().getLevelTwo() && points <= CommDiamondProperty.getInstance().getLevelThree()) {
            System.out.println("TF限量口红");
        } else if (points > CommDiamondProperty.getInstance().getLevelThree() && points <= CommDiamondProperty.getInstance().getLevelFour()) {
            System.out.println("SK-II套装");
        } else if (points > CommDiamondProperty.getInstance().getLevelFour() && points <= CommDiamondProperty.getInstance().getLevelFive()) {
            System.out.println("MCM双肩包");
        } else if (points > CommDiamondProperty.getInstance().getLevelFive()) {
            System.out.println("RADO雷达限量表");
        }
    }

新功能上线后,运营侧提出这次的分层太少了,BD到了更多的好的赠品,需要更加精细化的运营,由以前的5组变成10组,主刃此刻的心情:kao ...

那么是否有什么技术可以将活动规则和代码解耦,不管规则如何变化,执行端不用动。那就是规则引擎,那么规则引擎到底是什么东西呢?我们来看看。

规则引擎


▐  相关介绍

目前对领域模型的常见抽象方式是面向对象思想,即简单的来说把业务逻辑抽象为对象、对象的属性和对象的方法。这样规则跟整个系统耦合,修改规则需要走全Case的开发测试流程发布流程,对于频繁修改的规则效率比较低,为了解决这个问题就出现了规则引擎。

今天分享的Drools,最早由Jboss开发,目前由Redhat开源的规则引擎,选择分享Drools的原因是它是Redhat的KIE Group中的组件之一,可以比较方便的跟另一个组件JBPM工作流配合用于管理复杂的规则流;同时Drools的推理策略算法在经典Rete算法以及其它算法的基础上做了多个版本的增强,目前支持结合正向推理和反向推理优点的混合推理。

规则引擎主要完成的就是将业务规则从代码中分离出来。在规则

内容概要:本文全面介绍了Drools规则引擎,涵盖其初识、快速上手、核心概念、规则语言详解、高级特性、与Spring Boot的集成、应用场景与实战案例、性能优化与最佳实践等。Drools是一个基于Java的开源规则引擎,采用高效的Rete算法,能够快速处理大量规则和事实对象,提供声明式的规则定义方式,使业务人员也能参与规则制定,极大提高了系统的灵活性和可维护性。文章详细讲解了规则、工作内存、知识库、会话等核心概念,深入剖析了DRL文件的语法结构、条件表达式、动作执行等内容,并探讨了规则优先级、全局变量、动态规则加载、规则流等高级特性。此外,还介绍了Drools与Spring Boot的集成步骤、创建规则服务及测试方法,展示了Drools在金融风控、电商促销、物流管理等领域的应用场景,并通过具体案例演示了其实际应用过程。最后,提出了性能优化技巧和最佳实践建议,展望了Drools在未来的发展方向。 适合人群:具备一定编程基础,特别是Java开发经验的研发人员,尤其是对规则引擎感兴趣的开发者。 使用场景及目标:①学习如何在Java项目中引入Drools规则引擎,实现业务规则的分离与管理;②掌握Drools的核心概念、规则语言和高级特性,提高系统的灵活性和可维护性;③了解Drools在金融风控、电商促销、物流管理等实际场景中的应用,通过实战案例加深理解;④学习性能优化技巧和最佳实践,确保规则引擎的高效运行。 其他说明:本文不仅详细介绍了Drools的技术细节,还提供了丰富的实战案例和代码示例,帮助读者更好地理解和应用Drools。此外,文章强调了规则引擎在现代软件开发中的重要性,鼓励读者通过持续学习和实践,不断提升自己在规则引擎领域的技术能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秤座的架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值