您的位置 首页 > 加盟资讯

响应式web开发项目教程试题及答案,响应式web程序设计考试题

响应式Web 实践体验在介绍了Spring Boot 提供的响应式Web 服务功能之后,我们来看看如何在应用程序中充分利用这些功能。

Spring WebMVC是Web服务开发的主流框架,它使用非阻塞的Web服务来提高系统性能。但是,请注意,虽然servlet 本身在较新的版本中提供了异步、非阻塞通信机制,但Spring WebMVC 实现不允许在整个请求生命周期中进行非阻塞操作。因此Spring提供了Spring WebFlux框架,在支持异步、非阻塞的同时尽可能继承了自己的开发模型和API设计。 WebMVC和WebFlux的本质区别在于请求处理模型。我们知道WebMVC 是建立在I/O 块之上的。这意味着处理每个请求的线程可能会被阻止从I/O 读取传入的消息正文。相比之下,WebFlux 构建在非阻塞API 之上,不需要任何操作即可与I/O 阻塞线程交互。通过简单的原理分析,我们可以清楚地看出WebFlux提供的非阻塞Web服务可以提高系统的性能。为了验证此分析的结果,您可以通过运行测试用例来提供定量指标和数据。这里直接引用了书《Spring响应式编程》的测试结果。图5-7显示了WebFlux和WebMVC的吞吐量测量结果。

图5-7 WebFlux与WebMVC吞吐量测量结果对比

图5-8 显示了WebFlux 和WebMVC 之间的延迟比较。

图5-8 WebFlux和WebMVC的延迟对比

在图5-7和图5-8中,“+”线代表WebMVC,“-”线代表WebFlux。通过比较,不难得出结论,WebFlux 在降低吞吐量和系统延迟方面比WebMVC 更有效。具体测试结果参见《Spring响应式编程》。

构建全栈响应式服务系统关于响应式编程技术栈需要注意的一点是,响应式编程适用于调用链路上的所有组件,而不仅仅是系统中的某个特定组件,这意味着你需要这样做。所谓全栈反应式编程,具体定义了反应式开发技术的有效性,取决于整个请求链路的各个环节是否采用了反应式编程模型,如图5-9所示。

图5-9 全栈反应式编程示意图

在图5-9 中,如果特定链路或步骤无响应,则会出现同步阻塞,并且响应数据流将不再正常工作。如果某一层组件(例如数据访问层)无法采用反应式编程模型,那么反应式编程的概念对于整个请求链中的其他层来说就变得毫无意义。本章重点介绍Web 服务和网络协议。事实上,从Spring Boot 2 开始,Spring Data 为支持响应式访问的各种数据库提供了响应式版本的存储库。目前Spring Data Reactive Repository支持多种主流NoSQL数据库,包括MongoDB、Cassandra、Redis、Couchbase等。 Spring Data 项目有几个独立的模块,每个模块都为这些NoSQL 数据库提供响应式数据访问支持。在前面的案例中,我们查看了MongoDB 的ReactiveMongoRepository。使用响应式Spring Data Repository 与使用常规Repository 完全相同。这里我想强调的是,一般Web服务架构中最典型的无响应场景就是在数据访问层使用关系数据库。关系数据访问流程的响应式改造一直是一个技术挑战,但Spring Data 团队还是做了很多尝试,最终制定了R2DBC 规范。 R2DBC 代表Reactive Relational DataBase Connectivity,一种响应式关系数据库连接。该规范使驱动程序能够提供与数据库的完全反应式和非阻塞集成。 Spring Data也采用了R2DBC规范,并孵化了另一个独立组件SpringData R2DBC。 JDBC和R2DBC规范及相关技术栈的对应关系如图5-10所示。

图5-10 Spring Data JDBC 和Spring Data R2DBC

同样,这里是一些使用Spring Data R2DBC 的示例代码,如代码清单5-43 所示。代码清单5-43:增强的R2dbcRepository接口实现代码

公共接口ReactiveUserRepository 扩展R2dbcRepository { @Query('USER (USER_CODE, USER_NAME) value(:userCode,userName)') Mono addUser(String userCode, String userName); @Query('SELECT * FROM USER WHERE id=:id') Mono getUserById (长ID);}

可以看到,ReactiveUserRepository 扩展了Spring Data R2DBC 提供的R2dbcRepository 接口,并使用@Query 注解分别定义查询和插入方法。

RSocket 取代HTTP RSocket 协议越来越多地在Java 领域使用。 Spring Boot、SpringCloud、Dubbo等主流开发框架都集成了RSocket协议。 Dubbo 在3.0.0-SNAPSHOT 版本中提供了基于RSocket 协议的响应式编程支持,让用户可以非常方便地使用RSocket 语法。对于Spring家族来说,Spring 5.2也使用RSocket作为内置通信协议,并且随着Spring Boot 2.4的发布,Spring对RSocket的支持不断增长。在某种程度上,RSocket可以被认为是HTTP等其他协议的替代品。 REST最大的特点就是与HTTP密切相关,这既是优点,也是缺点。基于RESTful风格开发的Web API的优点是易于调试,但缺点是交互方式过于简单,仅支持请求/响应。随着微服务越来越流行,RSocket是专门为服务交互而设计的。它是一种面向连接、消息驱动的协议,在应用程序级别具有内置的数据流控制机制。适用于浏览器和服务器。

RSocket 提供了三种新的交互模式:请求/响应流、即发即弃和通道,并且可以与反应式编程技术完全集成。因此,它在交互性和性能方面比HTTP有很多优势。面试问题六:所谓的全栈响应式技术体系是什么意思?如何通过Spring框架实现全栈响应式?答:针对反应式编程模型,我们需要明确栈的概念反应式编程。其背后的设计思想是,它需要响应从Web服务层到业务逻辑层到数据访问层的请求。整个调用链路以数据流的方式交互。即方法调用的返回值必须是Mono或Flux对象。有了Spring,常规业务逻辑层组件可以直接使用Project Reactor框架来集成反应式编程技术,WebFlux可以用于Web服务开发,Spring RSocket可以用于网络通信,Reactive Spring Data可以使用以供访问。特别需要强调的是,现代关系型数据库仍然是大多数业务系统的基础,而针对关系型数据库的访问,Spring还专门开发了Spring Data R2DBC框架。

本文介绍Spring Web 服务应用程序的响应式Web 开发组件:响应式Web 实战体验接下来,我们将讨论springboot 内置缓存:了解创建高性能系统缓存和缓存注解。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023