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