相對於 Spring Boot 和 Spring Cloud 的專案
- 啟動快 5 ~ 10 倍
- qps 高 2~ 3 倍
- 執行時記憶體節省 1/3 ~ 1/2
- 打包可以縮小到 1/2 ~ 1/10(比如,90Mb 的變成了 9Mb)
關於 Solon
Solon 是一個更現代感的應用開發框架,輕量、開放生態型的。支援 Web、Data、Job、Remoting、Cloud 等任何開發場景。
- 強調,剋制 + 簡潔 + 開放 + 生態的原則
- 力求,更小、更少、更快、更自由的體驗
目前有近130個生態外掛,含蓋了日常開發的各種需求。
本次主要更新
- 新增 SocketContext::SessionState 介面支援
@Controller
public class DemoController{
@Socket
@Mapping("/hello")
public String hello(Context ctx){
if(ctx.session("user") == null){
ctx.sessionSet("user", "noear");
}
return ctx.session("user");
}
}
- 新增 Session::pathNew() 介面支援
- 新增 SolonApp::listenBefore, SolonApp::listenAfter 介面,以提供 Listener 過濾的支援
public class DemoApp {
public static void main(String[] args) {
Solon.start(DemoApp.class, args, app -> {
app.listenBefore(new ListenerEmpty() {
@Override
public void onOpen(Session session) {
//修改ws的監聽路徑
if (session.path().startsWith("/xx/")) {
session.pathNew(session.path().substring(4));
}
}
});
});
}
}
- 新增 sa-token-solon-plugin 外掛對 dao 適配[實驗方案]
- SaTokenDaoOfRedis
- SaTokenDaoOfSession
- 新增 mybatis-plus-extension-solon-plugin 外掛
- 外掛 solon.extend.sessionstate.jwt 呼略 ServiceConfigurationError 丟擲
- 新增 CloudJobInterceptor,提供 job 的攔截機制
@Slf4j
public class CloudJobInterceptorImpl implements CloudJobInterceptor {
@Override
public void doIntercept(Job job, CloudJobHandler handler) throws Throwable {
long start = System.currentTimeMillis();
try {
handler.handle(job.getContext());
} catch (Throwable e) {
//記錄帶標籤的日誌
TagsMDC.tag0("job");
TagsMDC.tag1(job.getName());
log.error("{}", e);
throw e; //別吃掉
} finally {
//記錄一個內部處理的花費時間
long timespan = System.currentTimeMillis() - start;
CloudClient.metric().addMeter(Solon.cfg().appName(), "job", timespan);
}
}
}
- 新增 CloudEventInterceptor,提供 event 的攔截機制
//CloudEventInterceptor 與 CloudJobInterceptor 起到型別的作用
- 調整 Gateway 的預設處理設定方式
- 調整 CloudJobHandler 為 job 的強制介面,之前 Handler 即可
- 調整 HttpUtils 增加短處理和長處理的切換支援
進一步瞭解 Solon
專案地址
- gitee:https://gitee.com/noear/solon
- github:https://github.com/noear/solon
- website: https://solon.noear.org