近年来,响应式编程在开发者社区和客户中很受欢迎,由于其以声明的方式构建应用程序的能力,而不是强制,形成更加敏感和有弹性的应用。Spring 5 将反应系统纳入其核心框架的事实已经显示出向声明式编程的范式转变。
响应式编程管理数据生产者和消费者之间的异步数据流,它们需要以流畅的方式对数据进行响应。所以,响应式编程都是异步和事件驱动的流畅应用程序,需要少量的线程进行缩放。
响应式编程很难构建基于线程的架构,由于在基于共享可变状态、线程和锁的应用程序扩展过程中涉及到高度复杂性。
在响应式编程的上下文中,“在流中有数据时,所有事物都是流并以流畅方式行为。”
为什么是响应式编程
高层次的抽象与响应式编程导致了代码可读性的提高,因此开发人员可以主要关注定义业务逻辑的事件的相互依存性。
在高度并发的环境中,响应模式自然地适合于消息处理,这是一个常见的企业用例。
由于执行反压力的特性,响应式方法最适合控制生产者和消费者之间的流量,这将有助于避免内存不足。
对于一个或几个线程,IO绑定任务可以通过异步和非阻塞方式执行,而且不阻塞当前线程。
在高交互和实时应用程序或任何操作/事件时,都可能触发多个连接子系统的通知,在这种情况下响应式编程可以更有效的进行管理。
用于响应式编程实现的理想案例
•大量的交易处理服务,如银行部门。
•大型在线购物应用程序的通知服务,如亚马逊。
•股票价格同时变动的股票交易业务。
响应流 (Reactive Streams)
“响应流”定义一个 API 规范,其中包含一组最小的接口,这些接口公开了定义非阻塞反压力的数据流的操作和实体的方法。
随着反压力的引入,响应流允许用户控制来自出版商的数据交换速率。
响应流 API java.util.concurrent.flow 已正式成为 java 9 的一部分。
响应流主要用作互操作层。
Spring 5 提供的响应式编程
Spring-Web-Reactive 模块和 Spring MVC 都支持相同的 @Controller 编程,但 Spring-Web-Reactive 是在 Reactive 和非阻塞引擎上执行的。