"solon.web.flux" 是 solon v2.3.6 新推出的生態插件,為 solon web 提供響應式接口支持 (io.projectreactor) 。為什麼叫這個名呢?因為用户羣裏投票説,這個名大家一看就知道是幹啥的!
這個插件,支持所有 solon 已適配的 http server 插件,包括 jdk 自帶的 sun http server。情況如下:
| 插件 | 適配框架 | 包大小 | 信號協議支持 | 響應式支持 | 備註 |
|---|---|---|---|---|---|
| solon.boot.jdkhttp | jdk-httpserver (bio) | 0.2Mb | http | 支持 | 摸擬了異步機制 |
| solon.boot.jlhttp | jlhttp (bio) | 0.3Mb | http | 支持 | 摸擬了異步機制 |
| solon.boot.smarthttp | smart-http (aio) | 0.7Mb | http, ws | 支持 | |
| solon.boot.jetty | jetty (nio) | 2.2Mb | http, ws | 支持 | |
| solon.boot.undertow | undertow (nio) | 4.5Mb | http, ws | 支持 |
因為使用的是“io.projectreactor:reactor-core” 的接口,所以 io.projectreactor 的相關組件都方便用,比如:
- io.projectreactor.rabbitmq:reactor-rabbitmq
- io.projectreactor.kafka:reactor-kafka
- 等等...
也可以對接其它響應式接口,比如 vert.x 的組件,簡單轉換後也可使用。
性能情況
目前還沒有系統測試過。不過,在一個用户的測試案例裏:
- "solon.boot.jlhttp" 和 "solon.boot.smarthttp" 表現得比 vertx 好很多(有點小意外)
- "solon.boot.jetty" 卻比 vertx 差很多(一時,還沒明白為什麼是這樣)
當然 vertx 肯定是更專業的,人家封裝了一批的響應式組件。Solon 是可以用很小的包去支持響應式,又是有自己的 Bean 容器。而且可以自由切換不同的 http server 適配組件,不同的應用場景,應該會有不同的最優選。
響應式的簡單示例
這個能力,與原來的 Mvc 並不衝突(可以説是原來 Mvc 能力的擴展)。可以一起用,按需選擇。比如下面這樣:
@Controller
public class DemoController {
//經典的套路
@Mapping("/hello1")
public String hello1(String name) {
return "Hello " + name;
}
//響應式的套路
@Mapping("/hello2")
public Mono<String> hello2(String name) {
return Mono.just("Hello " + name);
}
}
總體上跟原來的開發區別不大,只是返回類型變了。
Solon 是什麼開源項目?
一個,Java 新的生態型應用開發框架。它從零開始構建,有自己的標準規範與開放生態(歷時五年,已有全球第二級別的生態)。與其他框架相比,它解決了兩個重要的痛點:啓動慢,費內存。
解決痛點?
由於Solon Bean容器的獨特設計,不會因為擴展依賴變多而啓動很慢(開發調試時,省時、爽快)!以知名開源項目“小諾”為例:
- “snowy-spring 版” 啓動 30-50秒
- “snowy-solon 版” 啓動3-5秒,內存省了1/3(有興趣的,歡迎拉取代碼體驗)
所謂:“時間就是生命,效率就是金錢”,“天下武功,唯快不破”。
相對於 Spring Boot 和 Spring Cloud 的項目,有什麼特點?
- 啓動快 5 ~ 10 倍。 (更快)
- qps 高 2~ 3 倍。 (更高)
- 運行時內存節省 1/3 ~ 1/2。 (更少)
- 打包可以縮小到 1/2 ~ 1/10;比如,300Mb 的變成了 23Mb。 (更小)
- 同時支持 jdk8, jdk11, jdk17, jdk20, graalvm native
項目倉庫地址?
- gitee:https://gitee.com/noear/solon
- github:https://github.com/noear/solon