本章内容其实和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整合代码相关推荐

  1. spring cloud alibaba 全家桶详细整合

    文章目录 本项目代码仓库地址 一.此次版本信息说明: 二.组件说明 三.新建聚合工程 3.1父工程pom文件 四.搭建整合nacos 五. 整合nacos 注册中心,新建cloud-system模块 ...

  2. 5.Spring Cloud Alibaba教程:Nacos整合Feign

    概述 Feign是一个声明式的http客户端.使用Feign只需要创建接口并加上对应的注解,就可以实现类似RestTemplate方式的调用,只是它将底层的http请求代码隐藏起来.另外,Feign默 ...

  3. Spring Cloud Alibaba gateway ribbon 自定义负载均衡规则。发散灰度发布,金丝雀测试等

    上一篇介绍了,ribbon的组件.本篇要自己写一个灰度方案.其实就是一个很简单的思维扩散. 需求 前端header请求携带version字段.路由服务根据version去需要对应版本的服务集合,进行或 ...

  4. Spring Cloud 微服务实战系列-Ribbon整合RestTemplate实现负载均衡

    导语   在Spring Cloud项目中想要整合Ribbon只需要在pom文件中加入对应的依赖就可以了,那么在这次的分享中就来看看在Ribbon怎么通过RestTemplate来进行负载均衡,以及扩 ...

  5. 【java_wxid项目】【第十六章】【Spring Cloud Alibaba Sentinel集成】

    主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:[使用Spring Boot快速构建应用] 点击:[使用Spring Cloud O ...

  6. 跟我学Spring Cloud(Finchley版)-16-Zuul

    为什么80%的码农都做不了架构师?>>>    至此,已实现基于Eureka的服务发现,基于Ribbon的负载均衡,Feign也为我们提供了很不错的远程调用能力,使用Hystrix后 ...

  7. Spring Cloud Alibaba基础教程:@SentinelResource注解实现限流控制与熔断降级使用详解

    在之前的<使用Sentinel实现接口限流>一文中,我们仅依靠引入Spring Cloud Alibaba对Sentinel的整合封装spring-cloud-starter-alibab ...

  8. spring cloud 入门系列六:使用Zuul 实现API网关服务

    通过前面几次的分享,我们了解了微服务架构的几个核心设施,通过这些组件我们可以搭建简单的微服务架构系统.比如通过Spring Cloud Eureka搭建高可用的服务注册中心并实现服务的注册和发现: 通 ...

  9. 中国重汽微服务管理_干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统

    点击蓝色"泥瓦匠BYSocket",关注我哟 加个"星标",不忘文末签到哦 作者:王杰 项目地址 Gitee: https://gitee.com/log4j/ ...

  10. 规则引擎系列—初识规则引擎

    什么是规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业 ...

最新文章

  1. VS各种错误集成总结,持续更新
  2. 关于MySql链接url参数的设置 专题
  3. Freemarker循环遍历
  4. pycharm的演示模式、无干扰模式、全屏模式(presentation mode、distraction free mode、full screen mode)
  5. 组合逻辑与lamda算子的历史 英文
  6. 如何下载防盗链的歌曲?
  7. 数据科学:Oracle 并购 DataScience 公司提升机器学习能力
  8. 数据 到 端口 linux,linux如何查看某个端口接收到的数据
  9. 组件 -- Alert
  10. linkedlist 最难题 Insert into a Cyclic Sorted List
  11. Maven整合Spring与Solr
  12. ZeroMQ接口函数之 :zmq_proxy – 开始ZMQ内置代理
  13. DEM数据局部修改高程
  14. TWaver可视化软件(七) WEB组态可视化软件
  15. CUDA10安装,配合使用VS2017
  16. javascript满天小星星
  17. THUCNews新闻文本分类-tfidf+sklearn
  18. HTML制作宣传片,如何制作一部好的宣传片
  19. Linux 字体微调 - windows 效果版
  20. Linux shell实现阶乘

热门文章

  1. java中英文切换,Java实现多语言切换
  2. 从小白到架构师原来是这样修炼出来的
  3. php 做批量打印二维码,php语言开发的网站,如何实现批量打印快递单的功能?
  4. MRP系统运行计算逻辑浅析
  5. 聚类分析入门(理论)
  6. 微软私有云2012软件发布
  7. 虚拟化部署----USB Server
  8. win7+VS2008安装QT、环境配置以及简单实例演示
  9. Atitit 华为基本法 attilax读后感
  10. Android 7.1 PackageInstaller(应用安装器)增加自动点击安装