一不小心没忍住,发版了!
感觉hades
仓库才新建没多久,我一不小心没忍住,卷了一个星期,就直接发版了。上次在群里简单宣传了下hades
,但很多人还是不知道它是可以用来干什么的。
代码我写得很快啊,但文档似乎还没来得及跟上,今天就先给大家补下hades
的README吧。既然我都已经发版了,那说明是可以接入的!
这个季度的绩效里可以多一行了:在xxx业务上接入Java规则引擎(hades),提高了开发效率。
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.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-example
和hades-nacos-example
可用于调试
最后
过两天吧,我在austin
接入下,再给大家写下这个详细的过程,核心的代码并不多啊,大家可以到Git里学习学习
Gitee链接:https://gitee.com/zhongfucheng/hades
GitHub链接:https://github.com/ZhongFuCheng3y/hades