响应式 Spring

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

在 SpringOne2GX 2015 上,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 Reactive 努力的方向,您将找到一个 TestController,它看起来像任何 Spring MVC 控制器,但在新的响应式引擎上运行,并针对 Tomcat、Jetty、Undertow 和 Netty 进行集成测试。 请注意,该项目将在 5 月发布的 4.3 版本后不久合并到 Spring Framework 主分支中,为 6 月发布的 5.0 M1 版本做准备。

响应式基础

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

该规范很小,由 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 社区中所有即将举行的活动。

查看全部