# 第 10 章 Reactor 介绍

本章介绍

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

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

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

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://potoyang.gitbook.io/spring-in-action-v5/di-10-zhang-reactor-jie-shao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
