博客 / 詳情

返回

Solon Web 也支持響應式開發了?!

"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
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.