了解Spring反应性:介绍SpringWebFlux

640?wx_fmt=png

关注我们,了解更多精彩课程

640?wx_fmt=png


在本文中,我们将讨论Spring 5为反应性和异步并发模型提供的不同选择。我坚信,在我们拥抱新事物之前,我们应该意识到选择之间的差异,以及它与我们已经在做的事情之间的联系。让我们尝试找出在Spring 5中提供两个不同的非阻塞堆栈的原因。


640?wx_fmt=jpeg


基本上,Spring 5为异步和非阻塞方式提供了以下两个堆栈:

1. SpringMVC(ServletStack)

2. SpringWebFlux(反应性堆栈)


1

SpringMVC(ServletStack)


通过Servlet3.1的引入,SpringMVC可以实现非阻塞行为.但是,由于ServletAPI包含了几个仍处于阻塞状态的接口(可能是因为对向后兼容性的支持),所以总是有可能意外地在应用程序中使用阻塞API,这是为了开发成非阻塞的。在这种情况下,阻塞API的使用迟早会使应用程序崩溃。让我们用下面的代码片段来讨论这样的场景:

640?wx_fmt=png

为了在SpringMVC上下文中解释上述代码,使用容器管理错误页面是阻塞的。让我们看看我的GitHub储存库.

640?wx_fmt=png

每当Spring应用程序中发生错误时,容器将调用 /error页面,而“myError”页面将以阻塞方式呈现。当然,我们有办法处理这些事情,但它们绝对容易出错。总之,这很容易出错,因为应用程序可以访问servlet对象,servlet对象具有阻塞操作和非阻塞操作


因此,即使我们在Spring5MVC中有方法来编写完全非阻塞的代码,人们仍然认为需要有一个堆栈,在这个堆栈中不可能使用底层的阻塞API。这意味着ServletAPI不直接公开给应用程序。这迫使我们合并Spring反应堆栈,即SpringWebFlux。



2

SpringWebFlux(反应性堆栈)


SpringWebFlux是一个完全非阻塞的反应性框架,它确实与SpringMVC中的不同。那么,在SpringWebFlux中不阻塞需要什么呢?

· 事件循环在核心。

· 事件驱动架构,消息传递

· 通过反应性流api组合异步逻辑的方法

· 背压

SpringWebFlux并不直接使用servlet。相反,它使用SpringWebAPI,其中包括反应堆流。


本系列的目的是servlet/Spring从阻塞到非阻塞范式的发展。我不想在本教程中详细介绍SpringWebFlux。但是,我还是要介绍一个使用SpringWebFlux的SpringBoot应用程序示例。我们应该注意的一点是SpringWebFlux与Servlet容器无关。SpringWebflow工作在Servlet容器上,也可以通过反应堆Netty项目在Netty上工作。


在我的Spring引导应用程序中,我依赖WebFlux作为Spring启动程序,并且在服务器启动时,它说应用程序已经准备好使用Netty了。

640?wx_fmt=png

在同一个应用程序中,如果我们对Spring-boot-start-web使用依赖关系,那么日志将被打印出来,如下所示:

640?wx_fmt=png

因此,无需任何代码更改,我们就可以将SpringWebFlux应用程序作为SpringMVC应用程序运行。但是,反之亦然,因为SpringMVC应用程序可以使用HttpServletRequest/Response,它在SpringWebFlux运行时中不可用。


我已经创建了与我们在其中使用的相同类型的服务。

640?wx_fmt=png

我想让读者比较一下这个api和asyncNonBlockingRequestProcessing API,因为两者都使用非阻塞范式,但是底层堆栈对于两个API都是不同的。


感谢你阅读我的文章,我希望它有助于理解Spring/servlet上下文中的反应性。



640?wx_fmt=png 640?wx_fmt=png

不关注

640?wx_fmt=jpeg



就捣蛋

640?wx_fmt=png

长按上方二维码,关注“Java高级部落”


640?wx_fmt=gif

点击阅读原文,了解更多精彩内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值