Solon 1.6.36 發佈,更現代感的應用開發框架
相對於 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);
} 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://gitee.com/noear/solon
- github://github.com/noear/solon
- website: //solon.noear.org