spring boot 异步请求

1. spring boot 异步请求

  • 1.1 创建一个spring boot项目,并在pom.xml中引入需要的依赖内容
 
          org.springframework.boot
          spring-boot-starter-web
 
  • 1.2 通过@EnableAsync注解开启异步执行
@SpringBootApplication
@EnableAsync
public class SpringBootAsyncApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootAsyncApplication.class, args);
    }
}
  • 1.3 创建一个AsyncTestController、sync 是同步请求,async是异步请求
@RestController
public class AsyncTestController {

    @RequestMapping(value = "/sync", method = RequestMethod.GET)
    public String sync() throws InterruptedException {
        Thread.sleep(1000);
        return "sync";
    }

    @RequestMapping("/async")
    public Callable callable() {
        // 使用异步将不会阻塞tomcat的io读写线程池、使得增加系统的吞吐量
        return new Callable() {
            @Override
            public String call() throws Exception {
                Thread.sleep(1000);
                return "hello";
            }
        };
    }
}
  • 1.4 application.properties 配置文件
server.tomcat.max-threads=20
server.tomcat.max-connections=10000

2. jmeter 性能测压

  • 2.1 使用jmeter 进行测压 1000个线程同时请求http://localhost:8080/sync
    image.png
    • 2.1.1 同步1000次测压结果
1.Average:平均用户响应时间     24570毫秒
2.Median: 50%用户的响应时间    24570毫秒
3.90%Line:90%用户的响应时间    44091毫秒
4.95%Line:95%用户的响应时间    47040毫秒
5.99%Line:99%用户的响应时间    49018毫秒
6.Min:    最小响应时间        1011毫秒
7.Max:    最大响应时间        49034毫秒
8.Throughput:吞吐量          19.9/sec
  • 2.2 使用jmeter 进行测压 1000个线程同时请求http://localhost:8080/async
    spring boot 异步请求_第1张图片
    image.png
    • 2.2.1 异步1000次测压结果
1.Average:平均用户响应时间     1086毫秒
2.Median: 50%用户的响应时间    1047毫秒
3.90%Line:90%用户的响应时间    1276毫秒
4.95%Line:95%用户的响应时间    1303毫秒
5.99%Line:99%用户的响应时间    1325毫秒
6.Min:    最小响应时间        1002毫秒
7.Max:    最大响应时间        1351毫秒
8.Throughput:吞吐量          417.9/sec
  • 2.3 测压结论
    平均结果上异步处理和同步处理的性能相差20-40倍之间,然后这个测试并不是准确,但是从中也可以看出异步处理对整体的性能提升是非常可观。以上结论也是仅供参考。

3. ab 性能测压

spring boot 异步请求_第2张图片
image.png

4. 项目路径

https://github.com/chenshengyu/springBootAsync.git

你可能感兴趣的:(spring boot 异步请求)