Skip to content

xzcawl/hades

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

作者 Gitee Starts Gitee Starts issue-open issue-close issue-close issue-close issue-close jdk版本 maven版本 ORM框架 ORM框架 ORM框架

hades 介绍

项目背景:业务开发逻辑变更频繁,一点小的修改都要发布系统,灵活度不够。对于一些非核心流程又频繁改动的部分是否可以用动态脚本替代?

核心功能:Java应用无须发布上下线,即可动态变更业务逻辑

hades 技术原理

核心技术:Groovy+分布式配置中心(apollo/nacos)

技术原理:将Groovy脚本写在配置中心里,借助分布式配置中心监听配置功能,客户端能实时发现Groovy脚本变更。hades规则引擎将Groovy脚本解析后,放入Spring IOC容器中供客户端使用。

hades 使用手册

1、引入maven依赖:

<!--如果你用apollo,则引入该dependency-->
<dependency>
    <groupId>io.github.ZhongFuCheng3y</groupId>
    <artifactId>hades-apollo-starter</artifactId>
    <version>1.0.3</version>
</dependency>

<!--如果你用nacos,则引入该dependency-->
<dependency>
    <groupId>io.github.ZhongFuCheng3y</groupId>
    <artifactId>hades-nacos-starter</artifactId>
    <version>1.0.3</version>
</dependency>

2、在接入hades规则引擎的项目配置文件中(如:application.properties)填写主配置的文件名

nacos分布式配置中心示例:

nacos.config.server-addr=austin.nacos:8848
nacos.config.username=nacos
nacos.config.password=nacos
nacos.config.namespace=9537c674-f3a6-4203-b286-ef0c36bfacb2
nacos.config.enabled=true

# heades param you should write
hades.main.config.enabled=true
hades.main.config.file-name=hades
hades.main.config.group-name=hades

apollo分布式配置中心示例:

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

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

3、在对应的分布式配置中心创建hades主配置,配置内容如下:

(注:hades所有的配置内容在分布式配置中心默认均为txt格式)

{
    "instanceNames": [
        "TencentSmsService"
    ],
    "updateTime": "2023年3月20日10:26:0131"
}

说明:hades主要是监听以上配置的变更,当新增或修改了Groovy脚本时,需要手动更新该配置。

4、新建Groovy脚本,apollo需要跟主配置在同appId下,nacos在同namespace下。

注:Groovy脚本跟Java代码99%相同(特别要注意lambda语法和lombok的问题,建议不写lambda

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

private void test() {
    // 获取脚本对象,用接口接收
    SendSmsService sendSmsService = hadesClient.getInterfaceByName("TencentSmsService");
    sendSmsService.send();

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

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

hades 示例

hades-apollo-examplehades-nacos-example可用于调试

About

🔥Java规则引擎:groovy+分布式配置中心

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%