繁体   English   中英

Spring Reactive Web Framework客户端

[英]Spring Reactive Web Framework Client

我正在尝试使用响应式Web框架。关于它如何工作我有一定的疑问。

在典型的应用程序中,我们有数据存储区(关系型或无SQL)。 应用程序层(控制器)进行连接以存储和获取数据。 客户端层(调用您的API端点)并获取数据。

据我所知,没有由Vendors发布的异步或反应式驱动程序。只有Mongo和Cassandra可能有反应式驱动程序。 控制器层将使用Mono或Flux或Single传回数据。

客户端层将使用此数据。

由于HTTP本质上是同步的,因此客户端层或应用程序如何从Spring的响应式支持中受益。

问题:让我们说我有10条来自Flux响应的JSON记录。这意味着我的客户端将获取流中的数据,或者首先在客户端获取整个数据集,然后使用它的过程本质上是反应性的当前,由于HTTP协议的设计,我们将InputStream作为服务调用的响应,该响应本质上是阻塞的。

问题:当我们要获得响应的媒介是“自然界中的障碍”时,为典型的Web应用程序配备响应式架构是否有意义?

Spring Web Reactive使用Servlet 3.1非阻塞I / O并在Servlet 3.1容器上运行。 它还可以在非Servlet运行时(例如Netty和Undertow)上运行。 每个运行时都适用于一组共享的,反应性的ServerHttpRequest和ServerHttpResponse抽象,这些抽象将请求和响应主体显示为Flux,并在读取和写入侧提供了完全的反压支持。

来源: https : //docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/web-reactive.html

数据存储供应商和OSS社区正在为此工作。 Spring Data Kay中已经支持Cassandra,Couchbase,MongoDB和Redis。

我认为您是在混合HTTP协议本身并阻止Java API。 您不会在一个很大的块中就获得完整的HTTP请求或响应,因此HTTP协议不是同步的。 您选择的基础网络库也会驱动阻塞I / O或非阻塞I / O。

现在有关您的HTTP客户端问题:如果您使用的是WebClient ,则返回的Flux将在元素可用时立即发出。 基础库正在尽快读取和解码消息,同时仍要注意背压。

我不确定我是否有最后一个问题-但是如果您想知道何时和为什么应该使用被动方法:如果您已经遇到了可伸缩性/效率问题,或者如果您的应用程序正在与之通信,则此方法会有所帮助许多外部服务,然后对延迟很敏感。 Spring Framework 5.0 FAQ中查看有关此内容的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM