Spring cloud和规则引擎urule整合代码
本章内容其实和spring cloud没大关系,需要注册中心代码的参考前面的文章:https://blog.csdn.net/rishengcsdn/article/details/89956473
urule规则引擎是一套纯Java实现,运行时借鉴Rete了算法的优势,再结合中式规则引擎的特点,独创了一套自己的规则模式匹配算法的系统,参考文档:
http://www.bstek.com/resources/doc/
下面讲项目代码结构:
项目基于Spring Cloud的框架,整合了Urule2.1.2版本的控制中心。源码下载链接:
https://download.csdn.net/download/rishengcsdn/11189599
=======================================================================
pom.xml内容:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ecctest</groupId>
<artifactId>urule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>urule</name>
<dependencies>
<dependency>
<groupId>com.bstek.urule</groupId>
<artifactId>urule-console</artifactId>
<version>2.1.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.3.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.3.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sts</artifactId>
<version>1.11.125</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-autoscaling</artifactId>
<version>1.11.125</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-ec2</artifactId>
<version>1.11.125</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-route53</artifactId>
<version>1.11.125</version>
</dependency>
<dependency>
<groupId>org.hdrhistogram</groupId>
<artifactId>HdrHistogram</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-cbor</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>1.5.12</version>
</dependency>
<dependency>
<groupId>com.netflix.archaius</groupId>
<artifactId>archaius-core</artifactId>
<version>0.7.4</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
</dependencies>
</project>
=======================================================================
application.properties的内容,注意本地仓库文件地址配置urule.repository.dir=D:/urule,请按照实现环境修改:
#spring-cloud
spring.profiles.active=production
spring.application.name=urule
server.port=8087
feign.hystrix.enabled=true
eureka.instance.preferIpAddress=true
eureka.client.serviceUrl.defaultZone=http://localhost:1112/eureka
########################################################
###FREEMARKER (FreeMarkerAutoConfiguration)
########################################################
spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/pages/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved
#app
#urule setting --http://wiki.bsdn.org/pages/viewpage.action?pageId=75071588
urule.repository.dir=D:/urule
#urule.repository.dir=
#urule.repository.datasourcename=dataSource
#urule.repository.databasetype=mysql
# urule.repository.databasetype=oracle
urule.console.title=URule Console
urule.welcomePage=/ur/welcomePage
#locale
locale.default=zh_CN
=======================================================================
UruleApplication.java部分内容:
@ComponentScan(basePackages = "net.ecctest")
@EnableFeignClients("net.ecctest")
@EnableDiscoveryClient
@SpringBootApplication
@ImportResource({"classpath:/spring/applicationContext-urule.xml"})
public class UruleApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(UruleApplication.class, args);
}
@Bean
public ServletRegistrationBean registerURuleServlet(){
return new ServletRegistrationBean(new URuleServlet(), "/urule/*");
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
builder.sources(this.getClass());
return super.configure(builder);
}
}
=======================================================================
UruleController.java内容:
@Controller
public class UruleController {
@Autowired
private Invoke invoke;
@RequestMapping(value = { "/", "/index" }, method = RequestMethod.GET)
public String index() {
return "redirect:/urule/frame";
}
@RequestMapping(value = "/ur/welcomePage", method = RequestMethod.GET)
public String welcomePage() {
return "welcomePage22";
}
@RequestMapping(value = "/test/testRule", method = RequestMethod.GET)
public String testRule(ModelMap map,String bb1,String bb2) throws Exception {
String retMsg=invoke.doTest(bb1,bb2);
map.put("retMsg", retMsg);
return "retPage";
}
@RequestMapping(value = "/test/testRuleRest", method = RequestMethod.GET)
@ResponseBody
public String testRuleRest(@RequestBody Bbb bbb) throws Exception {
String retMsg=invoke.doTest(bbb.getBbb1(),bbb.getBbb2());
return retMsg;
}
}
=======================================================================
项目启动成功后访问:http://localhost:8087/
就可以看到规则引擎首页了
具体配置规则就是拖拖拽拽,修改一些参数,这里就不详细说明了,为了避免麻烦我建议导入我的备份文件测试项目例子-urule-repo-20190520105757.bak,导入和导出可以用在测试环境到生产环境的部署上。
导入成功后应该可以看到已经编辑好的知识包,变量库,向导式决策等等文件。
这个是变量库,对应于java代码的Bbb.java,代表一个业务实体。
然后是一个简单规则:
规则导入后,还是需要在知识包的界面上重新发布一下,刷新规则到内存。最好,在界面上仿真测试一下规则。
最后,通过浏览器访问ctrl类,http://localhost:8087/test/testRule?bb1=15&bb2=15,
获得结果如下:
规则引擎
高性能、便捷
图形化建模、仿真测试
结果为正确
修改业务参数:http://localhost:8087/test/testRule?bb1=3&bb2=15
获得结果如下:
规则引擎
高性能、便捷
图形化建模、仿真测试
结果不对啊
相对于drools引擎,urule显得轻便很多,rest接口实现可以参考我的UruleController.java的testRuleRest()方法。
Spring cloud和规则引擎urule整合代码相关推荐
- spring cloud alibaba 全家桶详细整合
文章目录 本项目代码仓库地址 一.此次版本信息说明: 二.组件说明 三.新建聚合工程 3.1父工程pom文件 四.搭建整合nacos 五. 整合nacos 注册中心,新建cloud-system模块 ...
- 5.Spring Cloud Alibaba教程:Nacos整合Feign
概述 Feign是一个声明式的http客户端.使用Feign只需要创建接口并加上对应的注解,就可以实现类似RestTemplate方式的调用,只是它将底层的http请求代码隐藏起来.另外,Feign默 ...
- Spring Cloud Alibaba gateway ribbon 自定义负载均衡规则。发散灰度发布,金丝雀测试等
上一篇介绍了,ribbon的组件.本篇要自己写一个灰度方案.其实就是一个很简单的思维扩散. 需求 前端header请求携带version字段.路由服务根据version去需要对应版本的服务集合,进行或 ...
- Spring Cloud 微服务实战系列-Ribbon整合RestTemplate实现负载均衡
导语 在Spring Cloud项目中想要整合Ribbon只需要在pom文件中加入对应的依赖就可以了,那么在这次的分享中就来看看在Ribbon怎么通过RestTemplate来进行负载均衡,以及扩 ...
- 【java_wxid项目】【第十六章】【Spring Cloud Alibaba Sentinel集成】
主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:[使用Spring Boot快速构建应用] 点击:[使用Spring Cloud O ...
- 跟我学Spring Cloud(Finchley版)-16-Zuul
为什么80%的码农都做不了架构师?>>> 至此,已实现基于Eureka的服务发现,基于Ribbon的负载均衡,Feign也为我们提供了很不错的远程调用能力,使用Hystrix后 ...
- Spring Cloud Alibaba基础教程:@SentinelResource注解实现限流控制与熔断降级使用详解
在之前的<使用Sentinel实现接口限流>一文中,我们仅依靠引入Spring Cloud Alibaba对Sentinel的整合封装spring-cloud-starter-alibab ...
- spring cloud 入门系列六:使用Zuul 实现API网关服务
通过前面几次的分享,我们了解了微服务架构的几个核心设施,通过这些组件我们可以搭建简单的微服务架构系统.比如通过Spring Cloud Eureka搭建高可用的服务注册中心并实现服务的注册和发现: 通 ...
- 中国重汽微服务管理_干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统
点击蓝色"泥瓦匠BYSocket",关注我哟 加个"星标",不忘文末签到哦 作者:王杰 项目地址 Gitee: https://gitee.com/log4j/ ...
- 规则引擎系列—初识规则引擎
什么是规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业 ...
最新文章
- VS各种错误集成总结,持续更新
- 关于MySql链接url参数的设置 专题
- Freemarker循环遍历
- pycharm的演示模式、无干扰模式、全屏模式(presentation mode、distraction free mode、full screen mode)
- 组合逻辑与lamda算子的历史 英文
- 如何下载防盗链的歌曲?
- 数据科学:Oracle 并购 DataScience 公司提升机器学习能力
- 数据 到 端口 linux,linux如何查看某个端口接收到的数据
- 组件 -- Alert
- linkedlist 最难题 Insert into a Cyclic Sorted List
- Maven整合Spring与Solr
- ZeroMQ接口函数之 :zmq_proxy – 开始ZMQ内置代理
- DEM数据局部修改高程
- TWaver可视化软件(七) WEB组态可视化软件
- CUDA10安装,配合使用VS2017
- javascript满天小星星
- THUCNews新闻文本分类-tfidf+sklearn
- HTML制作宣传片,如何制作一部好的宣传片
- Linux 字体微调 - windows 效果版
- Linux shell实现阶乘