一、什麼是WebFlux
Spring框架中包含的原始Web框架Spring Web MVC是專門為Servlet API和Servlet容器而構建的。WebFlux是在Spring 5中添加。Spring webflux 有一個全新的非堵塞的函數式 Reactive Web 框架,可以用來構建異步的、非堵塞的、事件驅動的服務,在伸縮性方面表現非常好。
Spring WebFlux 是 Spring 5 的一個新模塊,包含了響應式 HTTP 和 WebSocket 的支持,另外在上層服務端支持兩種不同的編程模型:
- 基於 Spring MVC 註解 @Controller 等
- 基於 Functional 函數式路由
二,Spring MVC與WebFlux對比
Spring MVC和Spring WebFlux可以一起使用,從設計上講,它們互為繼續、互為一致。它們的關係,請看下圖,既有共同的部分,也有互相獨立的部分。
Spring MVC的特點就是,它是命令式編程,代碼非常容易寫,也好理解和調試。但是它是同步的,會有人覺得它性能不好。
WebFlux響應式和非阻塞的關鍵好處是,在使用很少固定數目的線程和較少的內存情況下的擴展能力。
三、WebFlux示例代碼
1.首先我們添加pom文件配置
需要添加spring-boot-starter-webflux作為我們pom文件中的依賴項。
<code><dependency> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-starter-webflux/<artifactid> <version>2.0.8.RELEASE/<version>/<dependency>/<code>
2.添加application.properties
我們指定服務的端口為8088
<code>server.port=8088/<code>
3.新增Action
Action處理請求的返回類型採用響應式類型
<code>@RestControllerpublic class WebFluxAction { @GetMapping("/hello") public Mono<string> hello() { //使用Mono.just生成響應式數據 return Mono.just("hello world"); }}/<string>/<code>
完成上述三部後我們啟動服務,可以看到服務運行與netty框架之上:
<code>r.ipc.netty.tcp.BlockingNettyContext : Started HttpServer on /0:0:0:0:0:0:0:0:8088o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 8088/<code>
Netty是一套異步的、事件驅動的網絡應用程序框架和工具,能夠開發高性能、高可靠性的網絡服務器和客戶端程序。
閱讀更多 程序員老五 的文章