笔记来源:《Java实战(第2版)》ISBN:978-7-115-52148-4 作者:拉乌尔·加布里埃尔·乌尔玛,马里奥·富斯科,艾伦·米克罗夫特.
17.1 反应式宣言
17.1.1 应用层的反应式编程
- 这些技术比线程更轻量级
- 它们提升了创建并发以及异步应用的抽象层次
- 开发者能更关注于业务需求,不必花费大量精力在像同步、竞争条件、死锁这样典型的多线程底层实现上
采用这种线程多路复用策略时需要特别注意一点:
- 不要在主事件循环中添加可能阻塞的操作
- I/O 密集型操作:访问数据库或文件系统、调用远程服务
- 这些都是可能消耗比较长时间的事件,甚至无法预测何时能够结束
17.1.2 反应式系统
- 消息驱动与事件驱动的一个重要区别是
- 消息往往是直接发送给某个单一目标
- 事件会被所有注册了该事件的组件接收
- 此外,还有一点非常重要,值得特别提一下,反应式系统中消息是以异步的方式发送和接收的,这种方式有效地解耦了发送方与接收方。组件间完全的解耦合既是实现有效隔离的必要前提,也是保障系统在遭遇失效(韧性)和超大负荷(弹性)时仍能保持响应的基础。
17.2 反应式流以及 Flow API
- Java 9 开始
17.2.1 Flow 类
java.util.concurrent.Flow。这个类只包含一个静态组件,无法实例化。Flow类包含了四个嵌套的接口来体现反应式项目定义的标准“发布–订阅”模型,分别是:
- 发布者(Publisher);
- 订阅者(Subscriber);
- 订阅(Subscription);
- 处理者(Processor)
云里雾里
17.2.2 创建你的第一个反应式应用
17.2.3 使用 Processor 转换数据
17.2.4 为什么 Java 并未提供 Flow API 的实现
接口可以帮助你更好地构建你的程序思维,不过它并不能帮你更快地完成程序设计。