云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

美国服务器_湖南云服务器_免费6个月

小七 141 0

数据库软件_便宜的_人工智能需要哪些技术

springwebflux将反应式web开发引入到Spring生态系统中。本文将介绍反应式系统和Spring的反应式编程。首先,您将了解为什么反应式系统很重要,以及它们是如何在springframework5中实现的,淘客返利系统,然后您将获得使用springwebflux构建反应式服务的实际介绍。我们将使用注释构建第一个反应式应用程序。我还将向您展示如何使用Spring的新功能构建一个新的功能。反应系统与Spring WebFlux"反应式"一词目前在开发人员和IT经理中很流行,但我注意到它的实际含义存在一些不确定性。为了更清楚地了解什么是反应式系统,了解它们设计用来解决的基本问题是很有帮助的。在本节中,我们将讨论一般的反应式系统,并且我将介绍Java应用程序的反应式流API。阻塞与非阻塞web框架在传统的web应用程序中,当web服务器接收到来自客户端的请求时,大数据传输,它接受该请求并将其放入执行队列中。然后,执行队列的线程池中的线程接收请求,读取其输入参数,并生成响应。在此过程中,如果执行线程需要调用阻塞资源(如数据库、文件系统或其他web服务),则该线程将执行阻塞请求并等待响应。在这个范例中,线程被有效地阻塞,直到外部资源响应,这会导致性能问题并限制可伸缩性。为了解决这些问题,开发人员创建了大容量的线程池,返利公众号,这样当一个线程被阻塞时,另一个线程可以继续处理请求。图1显示了一个传统的、阻塞的web应用程序的执行流程。图1。线程执行模型NodeJS和Play等非阻塞web框架采用了不同的方法。它们使用非阻塞I/O,而不是执行阻塞请求并等待它完成。在这种模式中,应用程序执行请求,提供在返回响应时要执行的代码,然后将其线程返回给服务器。当外部资源返回响应时,将执行提供的代码。在内部,非阻塞框架使用事件循环运行。在循环中,数据分析和大数据,应用程序代码要么提供回调,要么提供包含异步循环完成时要执行的代码的future。本质上,非阻塞框架是事件驱动的。这需要一种不同的编程范式和一种新的方法来推理代码将如何执行。一旦你把你的大脑围绕它,反应式编程可以导致非常可伸缩的应用程序。反应式程序设计您可能听说过与web开发框架和工具相关的术语reactive programming,但是它的真正含义是什么?我们已经知道,这个术语起源于反应性宣言,它将反应性系统定义为具有四个核心特征:反应式系统是响应的,这意味着它们在所有可能的情况下都能及时响应。它们专注于提供快速一致的响应时间,建立可靠的上限,从而提供一致的服务质量。反应式系统是有弹性的,这意味着它们在面对故障时仍保持反应灵敏。恢复力是通过复制、控制、隔离和授权技术实现的。通过将应用程序组件彼此隔离,可以控制故障并保护整个系统。反应式系统是有弹性的,这意味着它们在不同的工作负载下保持响应。这是通过弹性地扩展应用程序组件来满足当前需求来实现的。反应式系统是消息驱动的,这意味着它们依赖于组件之间的异步消息传递。这允许您创建松耦合、隔离和位置透明性。图2显示了这些特征如何在反应系统中一起流动。图2。反应系统的特征无功系统的特性无功系统是通过创建相互异步通信的独立组件来构建的,这些组件可以快速扩展以满足当前负载。在反应性系统中,组件仍然会出现故障,但是由于该故障,有一些确定的动作要执行,这使得系统作为一个整体保持功能性和响应性。反应式声明是抽象的,但反应式应用通常具有以下组件或技术的特征:数据流:流是按时间顺序排列的事件序列,例如用户交互、REST服务调用、JMS消息和来自数据库的结果。异步:数据流事件是异步捕获的,您的代码定义了当事件被发出、发生错误以及事件流完成时要做什么。非阻塞:在处理事件时,代码不应阻塞和执行同步调用;相反,它应该进行异步调用,并在这些调用的结果返回时进行响应。背压:组件控制事件的数量和它们发射的频率。在反应式术语中,您的组件被称为订阅者,事件由发布者发出。这一点很重要,因为订阅者可以控制它接收到的数据量,因此不会使自己负担过重。失败消息:不是组件抛出异常,而是将失败作为消息发送到处理程序函数。虽然抛出异常会破坏流,但是定义一个函数来处理发生的故障却不会。反应流API新的Reactive Streams API是由Netflix、Pivotal、Lightbend、RedHat、Twitter和Oracle等公司的工程师创建的。Reactive Streams API于2015年发布,现已成为java9的一部分。它定义了四个接口:Publisher:向订阅服务器发出一系列事件。订阅服务器:接收和处理由发布服务器发出的事件。订阅:定义发布服务器和订阅服务器之间的一对一关系。Processor:表示由订阅者和发布者组成的处理阶段,并遵守两者的约定。图3显示了发布者、订阅者和订阅之间的关系。本质上,订阅服务器创建对发布服务器的订阅,当发布服务器有可用数据时,它将向订阅服务器发送一个包含元素流的事件。请注意,订阅服务器在其对发布服务器的订阅中管理其背压。既然您对反应式系统和reactive Streams API有了一点了解,让我们把注意力转向Spring用于实现反应式系统的工具:springwebflux和Reactor库。项目反应堆projectreactor是基于Java的Reactive Streams规范的第三方框架,用于构建非阻塞的web应用程序。Project Reactor提供了两个在Spring WebFlux中大量使用的发布程序:Mono:返回0或1个元素。返回0个或更多元素。通量可以是无止境的,这意味着它可以永远发射元素,或者它可以返回一个元素序列,然后在返回所有元素后发送一个完成通知。 Monos和fluxes在概念上类似于期货,中国物联网,但更强大。当您调用一个返回mono或flux的函数时,它将立即返回。函数调用的结果将在可用时通过mono或flux传递给您。在springwebflux中,您将调用返回mono和fluxes的反应库,而您的控制器将返回mono和fluxes。因为它们会立即返回,所以控制器将有效地放弃它们的线程,并允许Reactor异步处理响应。需要注意的是,只有使用反应式库,WebFlux服务才能保持反应性。如果使用非反应库,例如JDBC调用,则代码将阻塞并等待这些调用完成后再返回。首先导航到springinitializer主页,在那里您将选择一个带有Java的Maven项目,并选择最新版本的springboot(本文撰写时为2.0.3)。为项目指定组名,例如"com.javaworld.webflux网站,以及工件名称,例如"bookservice"。展开"切换到完整版本"链接以显示依赖项的完整列表。为示例应用程序选择以下依赖项:eb->Reactive Web:这个依赖包括springwebflux。MongoDB的反应式驱动程序包括MongoDB的反应式驱动程序。NoSQL->Embedded MongoDB:这个依赖关系允许我们运行MongoDB的嵌入式版本,因此不需要安装单独的实例。我们通常在ODB版本中使用它来避免测试。Core->Lombok:使用Lombok是可选的,因为您不需要它来构建springwebflux应用程序。使用projectlombok的好处是它允许您向类添加注释,这些类将自动生成getter和setter、构造函数、hashCode()、equals()等。完成后,您应该会看到类似于图4的内容。图4。springinitialzr项目截图按generateproject将触发包含项目源代码的zip文件的下载。解压缩下载的文件并在您喜欢的IDE中打开它。如果您使用的是IntelliJ,请选择"文件",然后选择"打开",然后导航到下载的zip文件已解压缩的目录。您会发现Spring initializer生成了两个重要文件:一个Maven xml文件,其中包含应用程序的所有必要依赖项。java,这是应用程序的springboot入门类。清单1显示了生成的pom.xml文件文件。清单1。马文pom.xml文件对于springwebflux示例应用程序