drools规则引擎对接风控系统简单实现Demo

本文记录了作者从五一假期后开始研究Drools规则引擎的三天学习历程,包括资源搜集、实践Demo搭建及遇到的挑战。通过阅读多个博客专栏,成功在风控系统中实现了一个简易Demo,同时探讨了KieContainer初始化慢、规则设定及优先级处理等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从五一放假回来,研究了三天的drools的原理,由于网上的视频基本都是收费,并且上班如果看视频只能是无声。所以研究的主要渠道就是通过博客专栏,当然也找了一些视频。视频都是加密的,日后等解密后分享出来。写这篇博客的目的是总结一下整个学习过程,及日后深入研究需要考虑的点。三天时间肯定只是皮毛,只能做一个简单的能运行的demo。

主要阅读的博客有一下这些,有一些是连载,非常感谢博主们的分享。

https://www.cnblogs.com/atomicbomb/p/7251814.html

https://jinfei21.github.io/2018/09/29/%E5%9F%BA%E4%BA%8E%E8%A7%84%E5%88%99%E7%9A%84%E9%A3%8E%E6%8E%A

https://ruleengine.iteye.com/blog/2019278

https://www.cnblogs.com/yuebintse/p/5767996.html

https://www.cnblogs.com/qiyexue/p/7822464.html

https://blog.csdn.net/sqzhao/article/details/70739140

https://hxrs.iteye.com/blog/985876

https://blog.csdn.net/RhyLK/article/details/78264959

纸上得来终觉浅,绝知此事要躬行 。今天花了两个半小时结合着风控系统简单的实现了一个Demo。

首先在项目的META-INF目录下添加一个kmodule.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="rules" packages="com.tts.forward.interfaces.drools">
        <ksession name="pay_rule"/>
    </kbase>
</kmodule>

简单解释一下:kbase 的packages属性值是规则文件的路径

 ksession的name属性是规则文件的名称,不用加后缀

书写drl文件时一定要注意语法。上面的博客中有详细介绍。

添加jar包

 

创建一个普通的javaBean

 

在引用时需要向规则引擎传入一个对象,准确的应该是Fact对象,但是也可以java对象。

执行。

在调试的过程中发现几个值得深入思考的问题:

1、

KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
            KieSession ksession = kc.newKieSession("pay_rule");

在第一次执行这两条语句的时候很明显感觉到很慢,后面好很多,如何解决第一次响应时间过慢的问题。

2、drools的文件应用有两种方式第一种是我这样,第二种是如何实现的。

3、如何设定规则。个人觉得最难的一点。

4、设置优先级,如何做到先后执行值累加的效果。

<think>好的,用户之前问过银行相关的Java面试题,现在他想了解作为Java程序员需要掌握的银行业务经验知识。我需要先回顾之前的回答,确保这次内容不重复,但可以补充。 首先,用户身份可能是一位准备面试银行Java岗位的程序员,或者已经进入该领域需要提升业务知识。他的需求是了解银行业务经验,结合Java技术应用。之前的回复侧重面试题和技术点,现在需要转向业务知识,但依然要结合技术实现。 用户可能没有明确说明的是,他希望知道哪些业务知识对开发银行系统至关重要,以及如何将这些业务需求转化为技术方案。需要分模块整理,涵盖核心业务概念、账户管理、支付清算、风控安全、日终处理、监管合规、技术对接、开发要点等方面。 需要确保每个业务概念都有对应的技术实现例子,比如在账户管理中,如何用Java处理账户状态变更,使用事务管理。同时,要提供学习路径,帮助他系统性地掌握这些知识。还要注意银行业务的特殊性,比如高并发、数据一致性、安全性,这些都需要在技术实现中考虑。 可能用户还希望了解实际项目中的注意事项,比如版本控制、文档管理和联调测试,这些在银行开发中尤为重要。此外,结合真实案例,如支付系统设计,能帮助他更好地理解业务与技术的结合点。 要避免过于技术化,而是强调业务逻辑如何驱动技术选择,比如为什么在支付系统中使用分布式事务而不是单机事务。同时,合规性部分需要强调法律法规的重要性,比如反洗钱处理,这在银行业务中是必须的。 最后,学习建议部分需要推荐他学习行业标准文档,如银联接口规范,以及参与实际项目或案例,这能帮助他积累经验。可能用户需要实际的操作指导,而不仅仅是理论,所以提供学习资源链接会更好,但假设不能放链接,就建议他自行搜索相关文档。 总结,回答结构应清晰,分业务模块讲解,每部分结合技术和业务,最后给出学习建议,帮助用户系统地掌握银行业务知识,提升作为银行Java程序员的能力。</think>以下是针对Java程序员需要掌握的银行相关业务经验知识体系,结合技术实现要点整理: --- ### 一、核心银行业务概念 1. **账户体系** - 账户分类:Ⅰ/Ⅱ/Ⅲ类账户的区别与使用场景 - 账户状态管理:冻结/止付/销户的技术实现(状态模式应用) - 余额计算:可用余额与账户余额的差异处理 2. **支付清算** - 联机交易与批量交易的区别(实时扣款 vs 夜间批处理) - 清算窗口与轧差处理(分布式事务场景) - 支付路由策略:同城/异地、本行/跨行路由选择 3. **信贷业务** - 贷款五级分类在系统中的标记方式 - 等额本息/等额本金算法实现(BigDecimal精度处理) - 还款计划生成与容错设计 --- ### 二、关键业务系统认知 1. **核心银行系统** - 存款、贷款、支付等模块的交互关系 - 会计科目与双敲记账实现(Java实现借贷平衡校验) 2. **支付系统** - 银联/网联对接规范(XML报文解析技术) - 冲正交易与自动补单机制(幂等性设计) - 支付通道熔断与降级策略(Hystrix应用) 3. **风控系统** - 交易反欺诈规则引擎Drools规则引擎集成) - 大额交易监控(实时流处理方案) - 黑名单同步机制(Redis布隆过滤器应用) --- ### 三、典型业务场景技术实现 1. **账户开户** - 客户身份联网核查(公安接口调用) - 人脸识别SDK集成(活体检测技术) - 开户协议电子签名(PDF生成与加密) 2. **转账交易** - 金额精度处理:`BigDecimal`使用规范 - 跨行转账的CCPC(城市处理中心)对接 - 转账限额控制(策略模式实现) 3. **日终批处理** - 利息计算(批量任务分片执行) - 报表生成(POI大数据量导出优化) - 对账文件处理(FTP/SFTP协议实现) --- ### 四、银行系统特殊要求 1. **数据一致性** - 金融级分布式事务(TCC模式实现) - 账务流水号全局唯一性保证(Snowflake算法改进) 2. **高并发处理** - 存款交易与查询交易的读写分离 - 热点账户问题解决方案(账户分段锁) 3. **监管合规** - 交易留痕审计(AOP实现操作日志) - 反洗钱数据上报(定时任务+文件加密) - 客户信息保护(数据脱敏与访问控制) --- ### 五、业务技术结合案例 **案例:支付系统设计** 1. 业务需求: - 支持多通道自动切换 - 单笔交易耗时<500ms - 99.99%系统可用性 2. 技术实现: ```java // 支付路由伪代码 public class PaymentRouter { private List<Channel> channels; public void process(PaymentRequest request) { channels.stream() .sorted(Comparator.comparingInt(Channel::getPriority)) .filter(c -> c.supports(request)) .findFirst() .ifPresent(c -> c.execute(request)); } } // 通道熔断器实现 public class ChannelCircuitBreaker { private CircuitBreakerConfig config = new CircuitBreakerConfig() .failureRateThreshold(50) .waitDurationInOpenState(Duration.ofSeconds(30)); public void executeWithFallback(Runnable command) { CircuitBreaker circuitBreaker = CircuitBreaker.of("channelCB", config); Try.run(circuitBreaker::run) .onFailure(e -> fallbackService.process()); } } ``` --- ### 六、业务知识学习路径 1. **理论学习** - 必读:《商业银行支付结算业务操作指南》 - 学习《支付业务许可证》相关要求 - 研究银联接口规范文档(如ISO8583报文标准) 2. **实践提升** - 开发模拟银行核心系统(账户+支付+清算模块) - 复现典型银行业务场景(如冲正交易处理) - 分析开源金融项目:如支付系统demo 3. **行业认知** - 了解人民银行最新监管政策 - 跟踪银行科技发展趋势(区块链在跨境支付中的应用) - 研究银行系统灾备方案(同城双活/异地容灾) --- ### 七、开发注意事项 1. **数值计算** - 禁止使用`double`处理金额 - 汇率转换时的四舍五入规则(银行舍入法) 2. **时间处理** - 交易时间戳统一使用北京时间 - 日切处理(批量任务与联机交易的时间隔离) 3. **异常处理** - 明确系统异常与业务异常(如余额不足属于业务异常) - 错误码规范设计(前2位标识业务域) --- 掌握银行业务知识需要持续积累,建议从具体业务场景切入,通过「业务需求→技术方案→实现细节」的三层分析法深化理解。实际开发中要特别注意金融业务对精确性、追溯性、合规性的特殊要求。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值