12.0 第12章 反应式持久化数据
第12章 反应式持久化数据
本章内容:
- - Spring Data的反应式repository
- - 为Cassandra和MongoDB编写反应式repository
- - 以反应式的方式使用非反应式的repository
- - Cassandra的数据模型
在思考非阻塞的反应式代码和阻塞的命令式代码时,我经常会想到上下班的高峰时刻(rush hour)。高峰时刻是一个很奇怪的名字。每个人都急着去他们想到的地方,但是我们通常只能几乎一动不动地坐在车流之中。如果路上没有其他人,我们能够轻而易举地到达目的地。
即便我非常希望到达某个地方(我没有阻塞),但是这并不意味着路上没有其他人挡着我。前面可能有其他司机发生了剐蹭事故,阻塞了其他车辆的通行。所以即使我本可以畅通无阻地回到家中,但此刻我也只能阻塞在这里等待事故清理完成。
在前面的章节中,我们看到了如何使用Spring WebFlux创建反应式、非阻塞的控制器。这样能够帮助我们提升Web层的可扩展性。但是,只有当与这些控制器协作的其他组件都是非阻塞的时候,它们本身才能是非阻塞的。如果我们编写的SpringWebFlux控制器依赖于阻塞的repository,那么反应式控制器需要阻塞等待它们生成数据。
因此,很重要的一点在于,要让整个数据流变成反应式和非阻塞的,也就是从控制器直到数据库。在本章中,我们将会看到如何使用Spring Data编写反应式的repository,这些repository与我们在第3章看到的编程模型非常类似。我们首先从整体上了解一下Spring Data对反应式的支持。