面向小白的SpringBoot的ProjectReactor介绍

208 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

上一篇我们讲了响应式编程,这一篇我们来讲解一下编程用到的接口,并把这些接口通过简单的方式进行实践一下,那废话不多说,我们就开始吧。

导入依赖

想使用这个响应式编程,我们需要导入依赖,如下:

<dependency>
   <groupId>io.projectreactor</groupId>
   <artifactId>reactor-core</artifactId>
</dependency>

介绍类或接口

元素相关

接着,我们介绍一些编程需要用到的类,生成元素的类flux

image.png

我们需要用这个接口,帮助我们生成元素:

image.png

指定起始和数量,之后它会进行一个拼接,然后保存。

和我们的流一样,支持一个元素的映射 image.png

线程调度器

image.png

线程调度immediate:当前线程执行 image.png

线程调度newSingle:新线程执行 image.png

线程调度elastic:缓存线程池里的线程,60秒生命周期 image.png

线程调度Parallel:固定的线程池运行,线程数和cpu核数大小相同 image.png

背压

指定请求数

image.png

搞代码

生产数据:

Flux.range(1, 6)

指定请求:

.doOnRequest(n -> log.info("Request {} number", n))

指定调度器:

.publishOn(Schedulers.elastic())

看看映射的是哪个线程

.map(i -> {
               log.info("Publish {}, {}", Thread.currentThread(), i);
               return i;
            })

发布完成,进行一个打印

.doOnComplete(() -> log.info("Publisher COMPLETE 2"))

订阅代码:

.subscribe(i -> log.info("Subscribe {}: {}", Thread.currentThread(), i),
                  e -> log.error("error {}", e.toString()),
                  () -> log.info("Subscriber COMPLETE")//,
            );

代码运行结果

生成6个序列,指定请求数是256,然后发布一个订阅一个,然后就实现了简单的响应式编程。 image.png