# 第 10 章 Reactor 介绍

本章介绍

* 理解响应式编程
* Reactor 项目
* 响应式的操作数据

你曾经是否订阅过报纸或杂志呢？互联网已经大幅度削减了传统出版物的用户群，但有当订阅的报纸是与当天发生的事件跟上的最佳途径之一的时候，传统媒体还是有一定机会的。你可以每个清晨细数投递来的报纸上的实事，在早餐或在上班路上进行阅读。

现在假设在订阅然后付费后，好几天去了，都没有收到任何报纸。又过了几天，你致电报纸销售处问道，为什么还没有收到你每日的报纸。试想一下，如果他们解释说，“你订阅的是整整一年的报纸，一年的报纸现在尚未全部完成，但是放心，当全年的报纸都准备完成后，你一定会得到所有的报纸。”这样你该会有多吃惊。

值得庆幸的是，不是所有的订阅都是这样工作的。报纸还有一定的时效性。在出版后，它们被尽快的投递出去，这样保证了当报纸被阅读时，内容仍然是最新的。此外，当你正在阅读最新的内容时，本报记者正在写后续的新故事，同时印刷机也在并行的出版下一个版本。

当我们开发应用程序时，有两种风格的代码我们可以写：命令式和响应式：

* *同步式* 的代码很像是假想的荒谬的报纸订阅的情况。这是一套串行任务，每次运行一个，完成前一个任务后再完成后一个。数据是批量进行处理的，在前面的任务没有完成批量数据处理前，不能将工作移交到下一个任务。
* *响应式* 的代码很像是真正的报纸订阅的情况。定义一组任务去处理数据，但这些任务可并行运行。每个任务处理这些数据的一个子集，当它处理另外一个子集的时候，把处理完成的数据交给下一个任务。

在本章中，我们将暂时离开 Tao Cloud 应用程序，来探索 Reactor 项目。Reactor 是响应式编程的一个库，这个库是 Spring 家族的一部分。而且，因为它是 Spring 5 对响应式编程支持的基础，在使用 Spring 建立响应式 controller 和 repository 之前，很重要的一步是让你理解 Reactor。在我们开始理解 Reactor 之前，让我们来快速浏览响应式编程的要领。
