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

項目地址