一不小心没忍住,发版了!

Java3y

共 2792字,需浏览 6分钟

 ·

2023-03-29 00:16

感觉hades仓库才新建没多久,我一不小心没忍住,卷了一个星期,就直接发版了。上次在群里简单宣传了下hades,但很多人还是不知道它是可以用来干什么的。

代码我写得很快啊,但文档似乎还没来得及跟上,今天就先给大家补下hadesREADME吧。既然我都已经发版了,那说明是可以接入的!

这个季度的绩效里可以多一行了:在xxx业务上接入Java规则引擎(hades),提高了开发效率

hades 介绍

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

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

hades 技术原理

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

da31e1c343fc41153b2b125bf08edf62.webp

技术原理:将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.2</version>
</dependency>

<!--如果你用apollo,则引入该dependency-->
<dependency>
    <groupId>io.github.ZhongFuCheng3y</groupId>
    <artifactId>hades-nacos-starter</artifactId>
    <version>1.0.2</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可用于调试

最后

过两天吧,我在austin接入下,再给大家写下这个详细的过程,核心的代码并不多啊,大家可以到Git里学习学习

Gitee链接:https://gitee.com/zhongfucheng/hades

GitHub链接:https://github.com/ZhongFuCheng3y/hades

浏览 50
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报