🔥hades文档不单独提供,跟austin消息推送平台捆绑,详情可戳:股东服务
项目背景:业务开发逻辑变更频繁,一点小的修改都要发布系统,灵活度不够。对于一些非核心流程又频繁改动的部分是否可以用动态脚本替代?
核心功能:Java应用无须发布上下线,动态变更业务逻辑,对象实例均交由Spring管理
不适用场景:脚本依赖运行环境不存在的SDK和对象
<!--如果你用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
分布式配置中心示例:
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
分布式配置中心示例:
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
,按自身情况自行修改:
# 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代码,注意不要用lombok和lambda,groovy是不认的。
2、如果是轻量级的逻辑,也可以直接在界面上配置逻辑,比如对字符串和数值的判断。当提交了之后,会根据条件自动生成对应Java
代码,注册到iOC
容器中
3、添加规则完后,能在规则列表中看到对应内容,并将其脚本注册到Spring iOC
容器中,供客户端使用
完全可以只通过分布式配置中心的后台,手动去创建配置,来实现效果。步骤如下:
1、在对应的分布式配置中心创建hades
主配置(配置名是hades.config-name
的值),配置内容如下:
{
"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%相同(不写lambda
和lambda
即可)
客户端使用HadesClient
获取对象或执行方法
@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);
}
想学Java项目的,我强烈推荐我的开源项目消息推送平台Austin(9K stars),可以用作毕业设计/校招,可以看看线上生产环境是怎么推送消息的。已经有不少同学通过这个项目拿到字节/菜鸟/vivo等大厂的offer了!
🔥项目仓库地址:https://gitee.com/zhongfucheng/austin
🔥项目在线演示地址:http://139.9.66.219:3000/
🔥11W+字,共107个文档,带你玩转austin,详情可戳:消息推送平台文档