「java调用drl」java调用draw方法

博主:adminadmin 2023-01-23 01:42:06 525

今天给各位分享java调用drl的知识,其中也会对java调用draw方法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

使用Drools来实现规则引擎

之前的文章介绍过,边缘部署的时候,flink on yarn模式比较重,太耗资源。于是我们打算采用Drools对目前的规则引擎进行改造,以满足边缘侧部署的需求。业务上规则引擎主要包括如下两部分:

1、数据转发

基于Flink Table Api SQL实现,以写SQL的方式,实现IOT平台数据的转发,支持对数据按照产品key、设备key、产品标签、设备标签来过滤。

2、场景联动

基于Flink CEP来实现。主要包括:触发条件配置、执行条件配置、执行动作配置三部分。支持IOT设备间的联动,比如:当室内温度大于30℃的时候,自动开启空调。

1、资源占用大

规则需要独立运行,至少做到租户级别的隔离。那么就需要一个租户一个job,Flink 一个job的占用内存约1G左右。无法支撑大量租户。

2、启停耗时长

尽管使用了session模式来启停job,但是整体耗时还是非常大。

3、无法动态加载

规则一旦更改,需要重启整个job。这是flink机制来决定的,flink会先在本地生成描述任务的有向无环图,然后提交给jobmanager。规则变了之后,还是需要在本地进行编译,然后提交给jobmanager。

4、组件依赖多

flink on yarn模式:需要hdfs、yarn和zookeeper。

由于存在以上的问题,所以边缘部署的时候由于资源受限,不能采用此模式。于是基于Drools来实现边缘侧的规则引擎方案应运而生。采用JAVA API方式集成Drools,能很好的解决我们的所有痛点。

1、定义统一的规则生成接口。

2、以数据转发为例,需要支持Flink SQL和Drools。提供两个不同的实现。

3、根据模板生成对应的规则信息,规则信息账户间隔离。

4、规则信息存储在MYSQL中,方便后续提供统一的规则查询服务。或者存储在分布式文件系统中。

1、规则信息按照orgId%16,均匀分配的不同节点上执行。

2、执行节点启动的时候,加载与自己节点相关规则信息。

3、直接通过JAVA API的方式集成Drools。

1)规则变更,以规则粒度通知规则调度程序。变更规则的信息发送到kafka的rule_notify。

规则信息包括:org_id、rule_id等

2)规则调度程序监听topic:rule_notify,判断此规则是否属于本节点,如果属于则通过rule_id

调用获取规则信息接口,得到规则的drl详情信息,然后本节点之前的rule删除,加载新规则。

3)整个流程为动态加载,不需要重启。

drools6.5 多个drl 文件怎么的重新加载

drl的when 里面可以调用函数,就先在java文件里面定义函数fun1(List list1,List list2)

例如

rule "XX"

when

$.XX(xxxx,fun1(listpar1,listpar2) == 1 )

then

System.out.println("list相同");

end

rule "XX1"

when

$.XX(fun1(listpar1,listpar2) ==0 )

then

System.out.println("list不相同");

end

我最近在学,但是没什么好办法,目前只想到这个,

我同问,期待更好的回答!!

java.lang.IllegalAccessError: tried to access method

出现这个错一般是因为访问权限错误,好好看看public,protected和private修饰符

轻量级规则引擎调研

我们基于Flink实现了云端的规则引擎,以flink on yarn方式在运行,依赖hadoop和zookeeper,对于边缘侧来说比较重,所以打算调研下轻量级的规则引擎,我们的业务诉求如下:

1、轻量级

2、支持海量规则

4、便捷的规则启停

5、动态加载

从如下几方面对比目前比较流行的几个规则引擎框架:

1、社区活跃度

drools(3.7k),比较活跃的社区。三者中遥遥领先。

2、SQL支持度

不支持,通过DSL定义规则。有开发工具,生成drl文件。

3、开箱即用(支持JAVA API直接调用)

可直接maven引入依赖,开箱即用。规则需要预先加载,环境初始化比较慢2秒左右。需要自己写规则调度。

4、部署方式

可部署多个kie-server,kie-server为单机模式。

1、社区活跃度

Siddhi(1.2k)。

2、SQL支持度

与flink sql类似,流式处理。定义source、sink,支持多流join。丰富的插件:kafka、redis等。通过类SQL的语言描述事件流任务。

3、开箱即用(支持JAVA API直接调用)

可直接maven引入依赖,开箱即用。规则需要预先加载,环境初始化比较慢2秒左右。需要自己写规则调度。

4、部署方式

第一种方式:Standard Deployment  ,单机部署,与drools的kie-server的部署方式类似。

第二种方式:完整的分布式部署

此部署规模已经很接近flink了,但是没有checkpoint的机制。

esper的社区活跃度真不高esper(699),所以我们直接略过。

几个主流的规则引擎其实实现机制都差不多,功能都能满足我们的业务场景,drools在sql支持方面比较弱,优势在社区活跃度。Siddhi的部署方式已经接近Flink,网上都说它比较轻量级,我是真的没看出来。最终打算采用drools,直接通过java api进行调用。自己写个简单的调度,如果上了它的执行调度模块,还不如直接使用flink,flink在这方面成熟多了,有checkpoint、status等机制。对于drools的动态加载,我会单独开一篇文章来详细说明,这个是我们的痛点,基于flink目前机制实现不了的。

关于java调用drl和java调用draw方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。