2022年10月更文挑战13-webflux响应式服务

108 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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流对象。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。