前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >提效神器!hades规则引擎

提效神器!hades规则引擎

作者头像
Java3y
发布2023-08-25 09:21:16
4960
发布2023-08-25 09:21:16
举报
文章被收录于专栏:Java3yJava3y

没更新文章的这些天一直在写hades项目(Java轻量级规则引擎),这两天发布了个新的版本v1.0.4

可能有新的同学就会想问了:什么是规则引擎呀?

项目背景:业务开发逻辑变更频繁,一点小的修改都要发布系统,灵活度不够。对于一些非核心流程又频繁改动的部分是否可以用动态脚本替代? 核心功能:Java应用无须发布上下线,动态变更业务逻辑,对象实例均交由Spring管理 不适用场景:脚本依赖运行环境不存在的SDK和对象

  • Gitee仓库:https://github.com/ZhongFuCheng3y/hades
  • GitHub仓库:https://github.com/ZhongFuCheng3y/hades

v1.0.3版本,我已经实现了核心的逻辑。可以通过分布式配置中心自带的后台,去手动增加/修改/删除配置进而实现脚本逻辑动态编译,最后注册到Spring iOC容器中。

而在v1.0.4版本,我写了个后台hades-web去对接分布式配置中心(目前仅支持nacos,因为apollo没有提供现成修改配置的接口,有点麻烦)。有了界面了以后,我又加上了条件逻辑(规则可视化):在页面上配置参数的信息,根据配置生成Java代码。

hades 使用手册

引入maven依赖

代码语言:javascript
复制

<!--如果你用apollo,则引入该dependency,建议用最新的版本-->
<dependency>
    <groupId>io.github.ZhongFuCheng3y</groupId>
    <artifactId>hades-apollo-starter</artifactId>
    <version>1.0.4</version>
</dependency>

<!--如果你用nacos,则引入该dependency,建议用最新的版本-->
<dependency>
    <groupId>io.github.ZhongFuCheng3y</groupId>
    <artifactId>hades-nacos-starter</artifactId>
    <version>1.0.4</version>
</dependency>

配置信息

在接入hades的项目配置文件中(如:application.properties)填写hades相关的配置信息

nacos分布式配置中心示例:

代码语言:javascript
复制
nacos.config.server-addr=austin-nacos:8848
nacos.config.username=nacos
nacos.config.password=nacos
nacos.config.namespace=hades
nacos.config.enabled=true

# hades param you should write
hades.enabled=true
hades.config-name=hades

apollo分布式配置中心示例:

代码语言:javascript
复制

app.id=hades
apollo.bootstrap.enabled=true
apollo.meta=austin-apollo

# hades param you should write
hades.enabled=true
hades.config-name=hades

规则可视化(可选)

目前后端部署仅支持使用nacos的小伙伴,hades有对应配置页面,将hades的前端和后端部署起来会方便使用些。

后端是SpringBoot应用,入口:com.java3y.hades.HadesApplication,前端是amis低代码平台,点击前端Git仓库进行部署。

后端的模块是在hades-web,对应的配置文件在application.properties,按自身情况自行修改:

代码语言:javascript
复制
# hades param you should write
hades.enabled=true
hades.config-name=hades

# nacos
nacos.config.enabled=true
nacos.config.server-addr=austin-nacos:8848
nacos.config.username=nacos
nacos.config.password=nacos
nacos.config.namespace=hades

1、可选择直接添加Java代码,注意不要用lomboklambda,groovy是不认的。

2、如果是轻量级的逻辑,也可以直接在界面上配置逻辑,比如对字符串和数值的判断。当提交了之后,会根据条件自动生成对应Java代码,注册到iOC容器中

3、添加规则完后,能在规则列表中看到对应内容,并将其脚本注册Spring iOC容器中,供客户端使用

只依赖配置中心

完全可以只通过分布式配置中心的后台,手动去创建配置,来实现效果。步骤如下:

1、在对应的分布式配置中心创建hades主配置(配置名是hades.config-name的值),配置内容如下:

代码语言:javascript
复制
{
    "instanceNames": [
        "com.java3y.hades.domain.HadesParam"
    ],
    "updateTime": "2023年3月20日10:26:0131"
}

注:hades所有的配置内容在分布式配置中心默认均为txt格式。hades会监听以上配置的变更,当新增或修改了Groovy脚本时,需要手动更新该配置。

2、新建Groovy脚本,apollo需要跟主配置在同appId下,nacos在同namespace下。Groovy脚本跟Java代码99%相同(不写lambdalambda即可)

使用客户端

客户端使用HadesClient获取对象或执行方法

代码语言:javascript
复制
@RequestMapping("/test")
private void test() {
    // 获取脚本对象,用接口接收
    SendSmsService sendSmsService = hadesClient.getInterfaceByName("com.java3y.hades.example.apollo.demo.TencentSmsService");
    sendSmsService.send();

    // 获取GroovyObject对象
    GroovyObject groovyObject = hadesClient.getGroovyObjectByName("com.java3y.hades.example.apollo.demo.TencentSmsService");
    groovyObject.invokeMethod("send", null);
    log.info("groovy object:{}", groovyObject);

    // 直接执行脚本对应的方法,得到返回值
    Object execute = hadesClient.execute("com.java3y.hades.example.apollo.demo.TencentSmsService", "send", null);
    System.out.println("result" + execute);
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java3y 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • hades 使用手册
    • 引入maven依赖
      • 配置信息
        • 规则可视化(可选)
          • 只依赖配置中心
            • 使用客户端
            相关产品与服务
            分布式配置中心
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档