本章内容其实和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内容:
=======================================================================
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()方法。