2015年我首次接触Drools规则引擎,当时我在做一个金融系统,需要使用规则引擎来处理大量反洗钱业务场景。由于场景的复杂性、多样性和多变性,传统的if-else判断和简单的脚本化处理已经无法满足业务需求,而市面上做得比较好的、开源的规则引擎非Drools莫属。
但是,我在学习和使用的过程中遇到了一个难题:技术资料匮乏。当时,我搜遍整个网络都无法找到相对全面的中文资料,唯一能够提供完整参考资料的就是官方的英文文档,即便如此,文档中对语法的讲解和使用案例的说明也不足。
于是,在随后的学习和使用过程中,我做了一些事情,比如翻译英文文档、编写实战案例、补充官方资料的不足等,并在博客上发布了近百篇相关文章,同时建立了一些技术交流群,录制了一些视频教程。
如今,再次搜索相关资料时,我发现网络上关于Drools规则引擎的资料越来越丰富了,而且许多文章和案例都是基于我的博客文章扩展而成的,这也算是我在这一领域所作的贡献之一吧。
同时我也发现,目前网络上的文章和书籍,大多停留在基础语法的使用和说明上,缺少深入的、系统的、贴近实战的案例。于是,我便有了写这本书的想法。
在写这本书时,我更多的是希望为技术社区多做一些贡献。在写作的过程中,不少朋友提供了实战案例和技术支持,在此表示感谢。写作、分享、为技术社区做贡献,这些都是非常有意义的事情,也希望更多的朋友以更丰富的形式为国内技术的发展添砖加瓦。
本书涵盖了Drools规则引擎的使用场景、实现原理、基础语法、项目集成、实战案例、算法等多方面的内容,因此,理论上适合各类读者群体阅读:
❑ 有一定Java编程语言基础的Drools规则引擎初学者。
❑ 想深入了解和实践Drools规则引擎的开发者。
❑ 希望使用规则引擎对项目进行设计和重构的架构师。
❑ 对规则引擎感兴趣的技术爱好者。
❑ 大专院校相关专业的学生。
关于Drools规则引擎,目前市面上有两类资料(文章和书籍):一类为基础的语法讲解,另一类为简单的实战案例。这些资料虽然能够帮助初学者入门,但无论是语法的罗列还是简单实战案例的代码展示,都无法让初学者或系统架构师从整体、系统、深入浅出的视角来学习和实践。再加上Drools规则引擎自身有非常多的灵活组合方案,于是大家就面临一个困境:语法学会了,简单的案例也写了,就是无法着手去实践。
本书的重点(或者说是特色)便是带领读者解决此难题。本书站在初学者的视角,先从Drools规则引擎的使用场景、实现原理出发,使读者理解什么场景适合使用规则引擎,它是如何运作的;然后,基于Drools规则引擎的核心语法结构、简单示例,使读者了解Drools的基本使用;接着,用大量篇幅来介绍各类组合案例以及如何将其集成到项目当中,其中既有我参与的项目,也有一些大厂项目。通过这样的结构设计,可帮读者学会技术选型,掌握基础语法,完成技术集成并学会设计适合自己项目的解决方案。最后,本书为想了解底层算法的读者简单介绍了规则引擎的算法实现,以便读者知其然也知其所以然。
本书的另外一个特色就是,在Drools框架的版本方面做到了最大的覆盖,兼顾历史版本和新版本的语法与解决方案。除已经过时的Drools 5之外,本书详细讲解了Drools 6/7的基础语法、组件支持(附录部分)、解决方案,以及Drools 8的传统语法、规则单元(新语法)、云原生实践等,以最大限度地满足读者的实践场景需要。
本书分为3篇:
❑ 基础篇(第1~5章),简单介绍规则引擎的使用场景、实现原理,以及Drools规则引擎的基础语法和核心API的使用。这部分旨在帮助读者快速了解相关背景、基础语法知识,并熟悉Drools规则引擎的代码编写。
❑ 高级篇(第6~10章),着重讲解Drools规则引擎决策管理系统架构、与Spring Boot的集成、与Kogito云原生的集成、转转图书的Drools实战案例、自建Drools BRMS实战等。这部分为本书的重点,也是读者在实践中常常无从下手的地方。这部分以从整体到局部的案例场景向读者演示如何进行实践,以便读者可以根据自己的业务场景选择最合适的实践方案。
❑ 拓展篇(第11和12章),简单介绍Drools规则引擎的底层算法实现以及可与人工智能(AI)配合使用的场景,旨在拓宽读者的视野和思路。
此外,附录(附录A和附录B)是基于Drools 6/7提供的BRMS组件的两种实战方案,以便使用这两个版本的读者更好地进行实践以及构建自己的BRMS。
上述内容按照递进关系展开,但又相对独立。初学者顺序阅读学习即可;已经有一定经验的读者,如果需要了解解决方案或实现原理等,可以直接阅读对应章节。
由于我的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我特意创建了一个提供在线支持与应急方案的二级站点https://github.com/secbr/drools-book,书中所有案例源码都可以从这里下载。读者也可以将发现的书中错误发布在勘误表页面中。读者遇到任何问题,可以访问问答(Q&A)页面,我将尽量在线上为读者提供解答。
首先感谢一直在推动Drools规则引擎发展,为这个技术领域做贡献的朋友们。
感谢转转的杜云杰、项赢,他们提供了案例分享以及技术和解决方案的支持。
谨以此书献给我最亲爱的家人,以及众多热爱技术分享的朋友们。
朱智胜