相對於 Spring Boot 和 Spring Cloud 的專案
- 啟動快 5 ~ 10 倍
- qps 高 2~ 3 倍
- 執行時記憶體節省 1/3 ~ 1/2
- 打包可以縮小到 1/2 ~ 1/10(比如,90Mb 的變成了 9Mb)
- 基於 app.name 進行註冊發現 與 k8s svc 相互對應
- 支援 Service Mesh 架構部署方案
關於 Solon
Solon 是一個更現代感的應用開發框架,輕量、開放生態型的。支援 Web、Data、Job、Remoting、Cloud 等任何開發場景。
- 強調,剋制 + 簡潔 + 開放 + 生態的原則
- 力求,更小、更少、更快、更自由的體驗
目前有近130個生態外掛,含蓋了日常開發的各種需求:
本次主要更新內容
- 新增 solon.extend.hotplug 外掛(提供業務外掛 '熱插撥' 和 '熱管理' 支援)
public class DemoApp {
public static void main(String[] args) {
Solon.start(App.class, args, app -> {
//新增待管理的外掛
PluginManager.add("add1", "/x/x/x.jar");
PluginManager.add("add2", "/x/x/x2.jar");
app.get("start", ctx -> {
//啟動外掛
PluginManager.start("add1");
ctx.output("OK");
});
app.get("stop", ctx -> {
//停止外掛
PluginManager.stop("add1");
ctx.output("OK");
});
});
}
}
更多介紹看官網的:solon.extend.hotplug
- 調整 AopContext ,更具隔離性
- 調整 AopContext::beanOnloaded 引數由 Runnable 改為:Consumer
- 調整 Plugin::start 引數由 SolonApp 改為:AopContext
public class Plugin1Impl implements Plugin {
@Override
public void start(AopContext context) {
//通過當前上下文掃描,具有隔離性
context.beanScan(Plugin1Impl.class);
context.beanOnloaded(ctx->{
//回撥有上下文資訊,方便做多外掛可複用的設計
});
}
}
- 修復 @Cache 在函式裡有逗號時無法刪除快取的問題
@Controller
public class DemoController {
/**
* 執行結果快取10秒,使用 key=test_${label} 並新增 test 標籤
* */
@Cache(key="test_${label}", tags = "test" , seconds = 10)
@Mapping("/cache/")
public Object test(int label) {
return new Date();
}
/**
* 執行後,清除 標籤為 test 的所有快取
* */
@CacheRemove(tags = "test")
@Mapping("/cache/clear")
public String clear() {
return "清除成功(其實無效)-" + new Date();
}
/**
* 執行後,更新 key=test_${label} 的快取
* */
@CachePut(key = "test_${label}")
@Mapping("/cache/clear2")
public Object clear2(int label) {
return new Date();
}
}
- 修復 Gateway 對預設介面識別失效的問題
@Mapping("/api/v3/app/**")
@Component
public class ApiGatewayV3 extends UapiGateway {
@Override
protected void register() {
filter(new BreakerFilter()); //融斷
before(new StartHandler()); //開始計時
before(new ParamsParseHandler()); //引數解析
before(new ParamsSignCheckHandler(new Md5Encoder())); //引數簽名較驗
before(new ParamsRebuildHandler(new AesDecoder())); //引數重構
after(new OutputBuildHandler(new AesEncoder())); //輸出構建
after(new OutputSignHandler(new Md5Encoder())); //輸出簽名
after(new OutputHandler()); //輸出
after(new EndBeforeLogHandler()); //日誌
after(new EndHandler("v3.api.app")); //結束計時
//新增一批具體的介面處理Bean
addBeans(bw -> "api".equals(bw.tag()));
}
}
- 修復 rocketmq-solon-plugin ,消費異常時仍返回成功的問題
- 優化 rabbitmq-solon-plugin ,消費異常時的處理
專案地址
- gitee:https://gitee.com/noear/solon
- github:https://github.com/noear/solon
- website: https://solon.noear.org