响应式 Spring

工程 | Rossen Stoyanchev | 2016年2月9日 | ...

在 2015 年的 SpringOne2GX 上,Juergen 宣布了 Spring Framework 5 的计划,主要关注响应式架构。具体的努力已经开始,并且从那时起发生了很多事情!

在最基本的层面上,响应式编程模型允许编写非阻塞服务和应用程序。这需要从编写命令式逻辑转向异步、非阻塞、函数式风格的代码,尤其是在与外部资源交互时。

响应式 Web 应用程序

大多数 Java Web 应用程序都是基于 Servlet API 构建的,该 API 最初是使用同步和阻塞语义创建的。多年来,增加了对异步请求(Servlet 3.0)和非阻塞 I/O(Servlet 3.1)的支持。在 Spring MVC 中,我们发现向现有应用程序添加选择性异步 HTTP 请求处理是可行的。但是,我们也发现,在现有的 Web 框架和应用程序生态系统中引入非阻塞 I/O 非常困难。这样做需要非常深层次的更改,一直到核心契约,这些契约需要从阻塞语义切换到异步语义。

Spring MVC 持续流行的原因之一是其基于灵活的控制器方法签名的直观、基于注释的编程模型。幸运的是,同样的方法可以继续作为响应式 Web 应用程序的基础。这是 Spring 响应式工作方向,您将在其中找到一个 TestController,它看起来像任何 Spring MVC 控制器,但在新的响应式引擎上运行,并针对 Tomcat、Jetty、Undertow 和 Netty 进行集成测试。请注意,该项目将在 5 月 4.3 版发布后不久合并到 Spring Framework 主分支中,以准备 6 月的 5.0 M1 版发布。

响应式基础

这项工作的一个关键要素是 Reactive Streams 规范,其目的是提供“用于具有非阻塞背压的异步流处理的标准”。该规范支持不同异步组件提供商之间的互操作性:从 HTTP 服务器到 Web 框架、数据库驱动程序等。它将作为 java.util.concurrent.Flow 包含在 JDK 9 中。

该规范很小,由 4 个接口、一些规则和一个 TCK 组成。但是,要将其公开为 API 需要围绕它构建基础设施以组合异步逻辑。Spring Reactive 使用 Reactor Core,这是一个小型且专注的库,作为希望基于 Reactive Streams 构建库和框架的基础。对于那些可能熟悉 Project Reactor 的人来说,在过去 6-8 个月中发生了很多事情,导致本周发布了 Reactor Core 2.5 M1,Stephane Maldini 将很快提供完整的更新。

敬请关注来自不同 Spring 项目的关于响应式编程的更多博文。此外,期待今年在美丽的巴塞罗那举行的 Spring I/O 大会上的一些响应式讨论!

获取 Spring 电子报

与 Spring 电子报保持联系

订阅

领先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部