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并发

相关文章
相关标签/搜索