Solon 1.6.36 釋出,更現代感的應用開發框架

劉之西東發表於2022-04-10

相對於 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

專案地址

相關文章