美文网首页
RxJava和Spring响应式编程

RxJava和Spring响应式编程

作者: 策马踏清风 | 来源:发表于2020-08-10 20:08 被阅读0次

响应式编程

  1. 传统方式
    前端访问后端,后端调用其他服务。
    然而调用的过程中(即网络IO)需要等待结果,这种同步阻塞的过程会产生大量无用的等待。
    占用服务端连接池(tomcat处理请求的线程)、降低吞吐量。
前端--> tomcat ---> tomcate
  1. 响应式系统
  • 有请求才会相应,快速响应
  • 系统吞吐量增高

RxJava

  • 一种响应式编程的类库
  • 基于观察者模式 (订阅-发布)

生产者

image.png

三种类型的消费者

image.png image.png image.png

订阅关系

image.png

简写

Observable.just("hello world")//简单创建一个生产者
              .subscribe(System.out::println);// 简易订阅

变换操作符

Observable.just("hello world")//简单创建一个生产者
              .map(v->v+"xxxx")
              .subscribe(System.out::println);// 简易订阅

中间操作使用不同线程

中间操作和消费者使用不同线程池

image.png

创建线程池操作

  • Schedulers.computation():和cup数量相关,cpu密集型使用
  • Schedulers.io():io操作相关的操作
  • Schedulers.newThread():直接创建线程,一般不用
  • Schedulers.from():使用自定义线程池
    出现多个subscribeon以第一个为准,即被观察者的线程池只有一个。

应用于业务代码

  • Controller层直接返回Observable,Spring会自动订阅该生产者
  • 可以节约连接池线程,连接池不用处理业务代码。

优点

  1. 减少代码量
  2. 简化线程操作,几乎不用考虑如何创建操作线程

Spring Reactor

DeferredResult

  • 基于Servlet3.0的异步Servlet(设置@Servlet(asyncSupported=true))
image.png
  • Servlet进入两次,一次是请求进入,然后调用业务线程。自身直接返回(连接线程返回线程池)。业务线程执行完通过DeferredResult再次找到Servlet获取连接对象,返回信息

相关文章

网友评论

      本文标题:RxJava和Spring响应式编程

      本文链接:https://www.haomeiwen.com/subject/tmeqdktx.html