Spring Boot 2 實戰:使用 Undertow 來替代Tomcat 做爲Web 容器

undertow.png

1. Undertow 簡介

Undertow 是一個採用 Java 開發的靈活的高性能 Web 服務器,提供包括阻塞和基於 NIO 的非堵塞機制。Undertow 是紅帽公司的開源產品,是 Wildfly 默認的 Web 服務器。Undertow 提供一個基礎的架構用來構建 Web 服務器,這是一個徹底爲嵌入式設計的項目,提供易用的構建器 API,徹底向下兼容 Java EE Servlet 3.1 和低級非堵塞的處理器。web

2. Undertow特色

  • 高性能 在多款同類產品的壓測中,在高併發狀況下表現出色。
  • Servlet4.0 支持 它提供了對 Servlet4.0 的支持。
  • Web Socket 徹底支持,包括JSR-356,用以知足 Web 應用巨大數量的客戶端。
  • 內嵌式 它不須要容器,只需經過 API 便可快速搭建 Web 服務器。
  • 靈活性 交由鏈式Handler配置和處理請求,能夠最小化按需加載模塊,無須加載多餘功能。
  • 輕量級 它是一個 內嵌Web 服務器, 由兩個核心 Jar 包組成

3. 替換默認的Tomcat

Spring boot 默認使用 Tomcat 內嵌容器 。依賴於 spring-boot-starter-web 。咱們只須要排除 Tomcat 依賴。引用Undertow 就能夠了,maven 配置以下:spring

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
   </dependency>
   <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>
複製代碼

4. 自定義配置Undertow

其實到第三步已經能夠愉快地玩耍了。你能夠當即在 felord.cn 找到更多教程來學習Spring Boot。固然你也能夠再折騰一番,經過在Spring Boot 配置文件application.yml中配置 ServerPropertiesServerProperties.Undertow 的相關屬性。 總結了一下比較陌生的ServerProperties.Undertow 的屬性:tomcat

# 設置IO線程數, 它主要執行非阻塞的任務,它們會負責多個鏈接, 默認設置每一個CPU核心一個線程
# 不要設置過大,若是過大,啓動項目會報錯:打開文件數過多
server:
 undertow:
 io-threads: 16
# 阻塞任務線程池, 當執行相似servlet請求阻塞IO操做, undertow會從這個線程池中取得線程
# 它的值設置取決於系統線程執行任務的阻塞係數,默認值是IO線程數*8
 worker-threads: 256
# 如下的配置會影響buffer,這些buffer會用於服務器鏈接的IO操做,有點相似netty的池化內存管理
# 每塊buffer的空間大小,越小的空間被利用越充分,不要設置太大,以避免影響其餘應用,合適便可
 buffer-size: 1024
# 每一個區分配的buffer數量 , 因此pool的大小是buffer-size * buffers-per-region
 buffers-per-region: 1024
# 是否分配的直接內存(NIO直接分配的堆外內存)
 direct-buffers: true
複製代碼

5. 總結

今天咱們演示瞭如何用性能優良的 Undertow 來做爲Spring Boot 的 Servlet Web 容器。其實在併發量不大的狀況下 Undertow、和其它兩款 Servlet Web 容器 JettyTomcat 的差距並非很大。 Undertow 的優點是高併發下的吞吐量。你能夠根據本身的實際須要來選擇。服務器

關注公衆號:Felordcn獲取更多資訊架構

我的博客:https://felord.cn併發

相關文章
相關標籤/搜索