无法使用 Apache Bench 测试 Spring Boot Webflux 性能
Could not test Spring Boot Webflux performance with Apache Bench
我在使用 Apache Bench 测试 spring 反应项目的性能时遇到了问题。
ab http://localhost:8080/hi
结果显示超时。
但是curl http://localhost:8080/hi
没问题
我的项目使用Spring引导版本是2.0.0.M6。我会粘贴一些代码。
pom.xml 是
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
MyRouter.java
@Component
public class MyRouter {
private static final Logger logger = LoggerFactory.getLogger(MyRouter.class);
@Bean
RouterFunction<ServerResponse> router(PersonHandler personHandler) {
return route(GET("/hi"), request -> ok().body(BodyInserters.fromObject("hello")));
}
}
是ab调用netty server时的bug造成的
要解决它,只需将 "Connection: closed" 添加到响应 header 中。但这不是最终的解决方案。
MyRouter.java
@Component
public class MyRouter {
private static final Logger logger = LoggerFactory.getLogger(MyRouter.class);
@Bean
RouterFunction<ServerResponse> router(PersonHandler personHandler) {
return route(GET("/hi"), request -> ok().header("Connection", "close").body(BodyInserters.fromObject("hello")));
}
}
我在使用 Apache Bench 测试 spring 反应项目的性能时遇到了问题。
ab http://localhost:8080/hi
结果显示超时。
但是curl http://localhost:8080/hi
我的项目使用Spring引导版本是2.0.0.M6。我会粘贴一些代码。
pom.xml 是
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
MyRouter.java
@Component
public class MyRouter {
private static final Logger logger = LoggerFactory.getLogger(MyRouter.class);
@Bean
RouterFunction<ServerResponse> router(PersonHandler personHandler) {
return route(GET("/hi"), request -> ok().body(BodyInserters.fromObject("hello")));
}
}
是ab调用netty server时的bug造成的
要解决它,只需将 "Connection: closed" 添加到响应 header 中。但这不是最终的解决方案。
MyRouter.java
@Component
public class MyRouter {
private static final Logger logger = LoggerFactory.getLogger(MyRouter.class);
@Bean
RouterFunction<ServerResponse> router(PersonHandler personHandler) {
return route(GET("/hi"), request -> ok().header("Connection", "close").body(BodyInserters.fromObject("hello")));
}
}