持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
webflux响应式服务
前文
本文内容为利用springboot进行webflux响应式服务搭建的一些实践及总结,内容主要是对现有知识的整理,不够完善及详细。文中代码主要是示例代码,仅用做功能测试。
webflux
首先了解一下什么是webflux。提到webflux,最常见的是我们常用的网关服务,springcloudgateway。它是一种非阻塞的异步请求处理方式,通过它能够支撑大量的io,提高系统的io处理性能。它能够采用少量的线程实现很好的数据处理效果,底层不是我们常用的tomcat,而是采用的netty。
搭建一个webflux服务
<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-webflux</artifactId>
</dependency>
首先引入相关的依赖,注意我们需要手动移除对于tomcat的依赖,以避免底层产生不必要的冲突。webflux底层实际为netty框架。
@GetMapping("/webflux/time")
public Object commonReq(){
long start = System.currentTimeMillis();
String data = testService.getData();
System.out.println(System.currentTimeMillis() - start);
return data;
}
在webflux程序的开发中,我们需要确保程序所返回的对象不是常规的对象,而是经过包装的对象。同时在程序的处理过程中,接口不会发生阻塞的现象,会直接进行程序数据的返回。也就是每一个接口实际上的耗时都是0。但与此同时,我们会在程序与客户端请求之间开启一个流进行处理,在流中进行实际的数据返回。例如对于程序数据的便利,会呈现一种递进的方式而不是一次性将所有数据返回给前端。要实现这种效果,也就要求我们在请求时进行设置,指定返回的数据mediaType为TEXT_EVENT_STREAM_VALUE流对象。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。