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

美国服务器_阿里云域名怎么解析_

小七 141 0

高防服务器_如何租用_零基础学大数据

在本文中,您将了解反应式编程、它的重要性以及何时将其应用于您的项目。通过学习反应式编程是如何产生的,以及如何通过springwebfluxapi在springboot中实现它,您将了解到这一点。为了更好地理解这些概念,您将使用springwebflux构建一个反应式restfulapi,免费自助建站软件,并使用oauth2.0保护它。您可以在GitHub存储库中找到本文中构建的项目。先决条件要继续阅读本文,您需要一些以前的Java经验。另外,如果您以前有过使用Spring的经验,选购云服务器,那会很有帮助。现在,对于您的开发环境,您需要安装以下组件:JDK 8或以上任何版本(本文使用JDK10)。您选择的任何文本编辑器或IDE(推荐使用IntelliJ)。springwebflux的理论基础问题陈述:阻塞I/O传统上,开发人员总是在应用程序的主线程上进行I/O。这会引发一个标志,因为它将阻止程序的执行。要解决这个问题,您可以在一个单独的执行线程上执行I/O,但是由于线程占用大量内存,所以这个解决方案不能扩展到许多I/O操作。此外,这个解决方案仍处于阻塞状态。解决方案:非阻塞异步I/O要解决这个问题,您需要一个线程和一个事件循环,就像节点.js. 这将保证异步和非阻塞I/O操作。springboot通过projectreactor和反应式编程范式实现了这个解决方案。在你开始玩Reactor项目之前,最好先了解一下它的基础。什么是反应式编程?jonasboneér和Viktor Klang认为,反应式编程,不要与函数式反应式编程混淆,是异步编程的一个子集,是一种新信息的可用性推动逻辑向前发展的范式,而不是由执行线程驱动控制流。因此,它是一种编程范式,允许系统根据新信息或数据的可用性运行。反应式编程的这个定义直接导致了异步编程和非阻塞编程。什么是异步编程?异步编程是一种范例,它允许开发人员编写能够响应未来事件或程序状态变化的代码。这种编程的最好例子来自JavaScript。例如,setTimeout函数等待给定的毫秒数(一秒是1000毫秒),然后调用一个函数。设置超时(()=>控制台.log("勾号"),500);控制台.log("你好");如果您运行以下代码,您将发现"Tick"在"Hello"之后被打印出来,因为setTimeout的第一个参数是一个将在500毫秒后调用的回调。换句话说,在"你好"打印出来之后。使用这个回调原则,您可以访问共享资源,而不会阻塞程序的执行。为了支持异步编程,智能工厂解决方案,反应式库的API要么是回调,要么是声明性/函数式的(通过map、filter和reduce等函数)。由于许多声明性/基于hell的回调函数库是基于hell的。什么是非阻塞编程?为了理解非阻塞I/O,您需要了解什么是阻塞I/O。传统上,对数据库或操作系统资源的访问将阻塞执行的主线程,并且只有在操作完成后才能继续执行。现在,有了MongoDB和关系存储中的反应式数据库驱动程序的支持,Java web应用程序现在可以访问这些资源,而不会阻塞您的执行线程。反应式编程的好处首先,提高多核和多CPU硬件上的资源利用率。jonasboneér和Viktor Klang认为,反应式编程提高了开发人员的生产率,因为与传统的编程范式不同,反应式编程提供了处理异步非阻塞计算和I/O的方法。最后,但并非最不重要的是,反应式编程在为反应式系统创建组件方面表现出色。有些系统具有响应性、弹性、弹性和消息驱动性。基于反应流的反应式程序设计为了支持反应式编程,springboot背后的团队创建了一个名为projectreactor的库,它实现了reactivestreams计划的规范。这是一个倡议,提供一个标准的异步流处理无阻塞背压。本标准通过以下接口规定:Processor-此类表示一个处理阶段,它既是订阅者又是发布者,并遵守两者的约定。Publisher-这是一个提供程序,它提供了数量可能无限的序列元素,根据从其订阅者那里收到的请求发布它们。Subscriber-此类的实例将接收对订阅服务器.onSubscribe(订阅)将订阅服务器的实例传递给Publisher.subscribe(认购人)订阅-此类表示订阅发布服务器的订阅服务器的一对一生命周期。反应流数据流在处理反应流时,数据流如下:在发布服务器实例上调用subscribe方法。然后创建订阅对象,并使用订阅对象执行订阅服务器的onSubscribe方法。之后,订阅服务器将调用订阅类中的request方法,大数据云计算人工智能,以指定它可以处理的对象数(如果未显式调用此方法,则会请求无限数量的对象)。然后订户可以通过onNext方法接收对象。如果订阅者接收到它请求的所有对象,它可以请求更多对象或通过调用onComplete取消订阅。如果在某个时刻出现错误,发布者将调用订阅服务器上的onError方法。有关Reactive Streams接口的更多详细信息,请查看此资源。项目反应堆反应流的实施projectreactor为Publisher接口实现了两种数据类型:Flux和Mono。Flux表示对象列表,Mono表示零或一个对象。这些实现支持map、filter、reduce和flatMap等运算符,这些运算符将一个发布服务器中的每个条目映射到另一个发布服务器。最后但并非最不重要的是,为了从发布服务器(Flux或Mono)获取数据,您需要调用它的订阅。什么是Spring WebFlux为了支持反应式编程和反应式系统的创建,springboot团队创建了一个全新的web堆栈springwebflux。这个新的web栈支持带注释的控制器、功能端点、WebClient(类似于springwebmvc中的restemplate)、WebSockets等等。用springwebflux开发restfulapi在本节中,您将通过创建电影restapi来学习springwebflux的一些关键特性。对于初学者,请转到Spring initializer页面,并按如下方式填写表单:生成a:在页面顶部,选择"Gradle Project"。组:您可以将此字段保留为com.示例.工件:你可以在这里输入movie api。然后,您必须添加以下依赖项(通过搜索依赖项字段):反应网安全嵌入式MongoDB无功MongoDB填写完表单后,单击GenerateProject按钮。这将为您下载您的项目。然后,解压下载的文件并在您喜欢的IDE中打开您的项目。之后,导航到生成.gradle项目根目录中的文件。请注意,您的嵌入式MongoDB依赖项(de.flapdoodle.embed公司:de.flapdoodle.embed公司.mongo)已添加为testImplementation依赖项。springboot将此依赖项添加为测试依赖项,因为它希望您在开发和测试中使用此数据库,而不是在生产中使用。在本教程中,将此依赖项设置为实现依赖项。更改后,依赖项部分应如下所示://.... 文件的其余部分依赖关系{// ... 不要删除其他两个依赖项。。。实施('de.flapdoodle.embed公司:de.flapdoodle.embed公司.mongo')}接下来,需要定义一个电影实体来表示数据库中的电影。为此,首先在com.example.movieapi包裹。在该包中,创建一个名为Movie的类,并在其中粘贴以下内容:包裹com.example.movieapi.型号;进口org.springframework.data.注释.Id;进口org.springframework.data.mongodb.core.mapping.文件;进口java.time.LocalDateTime;进口java.util.Objects;@文件公共类电影{@身份证私有字符串id;私有字符串名称;私人弦乐体裁;私有LocalDateTime releaseDate;公共电影(){}公共电影(字符串id、字符串名称、字符串类型、LocalDateTime releaseDate){此.id=身份证;此名称=姓名;这种类型=类型;发布日期=发布日期;}公共字符串getId(){返回id;}public void setId(字符串id){此.id=身份证;}公共字符串getName(){返回名称;}public void setName(字符串名称){此名称=姓名;}公共字符串getGenre(){返回体裁;}public void setGenre(字符串类型){这种类型=类型;}公共LocalDateTime getReleaseDate(){返回释放日期;}public void setReleaseDate(LocalDateTime releaseDate){发布日期=发布日期;}@覆盖公共布尔等于(Object o){if(this==o)返回true;如果(o==null | | getClass()!=o.getClass())返回false;电影电影=(电影)o;返回对象.equals(身份证,电影.id) &&对象.equals(姓名,电影名称) &&对象.equals(类型,电影.流派) &&对象.equals(发布日期,电影发行日期);}@覆盖公共int哈希代码(){r

,生态环境大数据