一不小心沒忍住,發(fā)版了!
感覺hades倉庫才新建沒多久,我一不小心沒忍住,卷了一個星期,就直接發(fā)版了。上次在群里簡單宣傳了下hades,但很多人還是不知道它是可以用來干什么的。
代碼我寫得很快啊,但文檔似乎還沒來得及跟上,今天就先給大家補下hades的README吧。既然我都已經(jīng)發(fā)版了,那說明是可以接入的!
這個季度的績效里可以多一行了:在xxx業(yè)務(wù)上接入Java規(guī)則引擎(hades),提高了開發(fā)效率。
hades 介紹
項目背景:業(yè)務(wù)開發(fā)邏輯變更頻繁,一點小的修改都要發(fā)布系統(tǒng),靈活度不夠。對于一些非核心流程又頻繁改動的部分是否可以用動態(tài)腳本替代?
核心功能:Java應(yīng)用無須發(fā)布上下線,即可動態(tài)變更業(yè)務(wù)邏輯
hades 技術(shù)原理
核心技術(shù):Groovy+分布式配置中心(apollo/nacos)

技術(shù)原理:將Groovy腳本寫在配置中心里,借助分布式配置中心監(jiān)聽配置功能,客戶端能實時發(fā)現(xiàn)Groovy腳本變更。hades規(guī)則引擎將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規(guī)則引擎的項目配置文件中(如: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、在對應(yīng)的分布式配置中心創(chuàng)建hades主配置,配置內(nèi)容如下:
(注:hades所有的配置內(nèi)容在分布式配置中心默認(rèn)均為txt格式)
{
????"instanceNames":?[
????????"TencentSmsService"
????],
????"updateTime":?"2023年3月20日10:26:0131"
}
說明:hades主要是監(jiān)聽以上配置的變更,當(dāng)新增或修改了Groovy腳本時,需要手動更新該配置。
4、新建Groovy腳本,apollo需要跟主配置在同appId下,nacos在同namespace下。
注:Groovy腳本跟Java代碼99%相同(特別要注意lambda語法和lombok的問題,建議不寫lambda)
5、客戶端使用HadesClient獲取對象或執(zhí)行方法
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);
????//?直接執(zhí)行腳本對應(yīng)的方法,得到返回值
????Object?execute?=?hadesClient.execute("TencentSmsService",?"send",?null);
????System.out.println("result"?+?execute);
}
hades 示例
hades-apollo-example和hades-nacos-example可用于調(diào)試
最后
過兩天吧,我在austin接入下,再給大家寫下這個詳細(xì)的過程,核心的代碼并不多啊,大家可以到Git里學(xué)習(xí)學(xué)習(xí)
Gitee鏈接:https://gitee.com/zhongfucheng/hades
GitHub鏈接:https://github.com/ZhongFuCheng3y/hades
