WebFlux
- 是一个类似于spring mvc的框架,优点是异步非阻塞。默认采用netty作为服务器。充分利用了多核cpu的硬件资源提高并发数
- WebFlux 并不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性。
- webflux也可以使用 Spring MVC 注解,如 @Controller, 方便我们在两个 Web 框架中自由转换,也使用 Tomcat, Jetty等java应用服务器
- webflux不支持
**mysql**等非内存型数据库,(支持mongdb)
spring mvc是同步阻塞式,mvc更方便debug,测试,编写功能
使用
webflux依赖里主要的是引入了
reactor,该东西能实现多路分发的作用<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>
Mono是用于异步返回的类,还有一个Flux,二者区别在于Mono返回0或者一个对象。而Flux可以返回N个对象 ```java @GetMapping(“/user”) public Mono
getUser() { User user = new User(); user.setName("犬小哈"); user.setDesc("欢迎关注我的公众号: 小哈学Java"); return Mono.just(user);}
<a name="DRtBq"></a>
## 设置WebFlux返回模型
- 可以参照下这个,更具体地封装见ruoyi地gateway模块地authFilter
- 其实跟直接返回Mono或者Flux没啥区别,完全可以直接构建个通用响应对象然后塞进Mono中返回
```java
public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, String contentType, HttpStatus status, Object value, int code)
{
response.setStatusCode(status);
response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType);
R<?> result = R.fail(code, value.toString());
DataBuffer dataBuffer = response.bufferFactory().wrap(JSON.toJSONString(result).getBytes());
return response.writeWith(Mono.just(dataBuffer));
}
网站的性能
性能指标
- 响应时间:即接口的执行时间
- 并发数:同时处理多个请求的数量
- 吞吐量:单位时间内的请求处理数
- 性能计数器:服务器的cpu,磁盘,网络,内存的使用情况
一般是依据上面的结果去得到的综合指标,综合指标有:
- QPS(Query Per Second):服务器每秒可以执行的查询次数;
TPS(Transaction Per Second):服务器每秒处理的事务数(这里的一个事务可以理解为客户发出请求到收到服务器的过程);
负载测试:逐渐加大请求压力,直至饱和(如系统的缓存已经不够用了或者系统的响应时间已经不满足要求)
-
测试工具
除了 LoadRunner 其他几款性能测试工具都是开源免费的。
- Jmeter :Apache JMeter 是 JAVA 开发的性能测试工具
- LoadRunner:一款商业的性能测试工具。
- Galtling :一款基于Scala 开发的高性能服务器性能测试工具。
- ab :全称为 Apache Bench 。Apache 旗下的一款测试工具,非常实用。
前端工具:
io密集型即更吃磁盘内存的操作。cpu密集型即更吃cpu,内存的操作
- io密集型还分为磁盘IO密集型, 网络IO密集型
- 微服务网关就是网络 IO 密集型,jdbc个人觉得是磁盘io密集
