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

京东云_成都网站建设龙兵科技_优惠券

小七 141 0

简介

与经典命令式相反,反应式编程模型的原理在不久前已经被定义并写在反应式宣言中。范式的主要转变是实现非阻塞(异步)应用程序及其组件,它们基于组件对事件流作出反应的概念。对事件/流作出反应,而不是调用阻塞函数并等待它们完成工作并将控制权返回给调用者函数,大数据前景,从而提高了整个应用程序的性能和吞吐量。应注意的是,在依赖于其他主要和阻塞组件的应用中,仅使用少量的反应组件不太可能带来显著的改善,因为上游组件的反应性质将被下游组件的阻塞性质中和——例如,如果被相应请求查询的数据库层不支持反应式模型,并且在处理数据库请求时使用经典的阻塞原则,那么在API或服务层实现反应式非阻塞原则对整个应用程序都不会产生预期的效果。同样重要的是要确保执行应用程序的运行时也符合反应模型并支持它,向无功应用程序迈进的重要里程碑是发布流API的Java 8的发布,这成为了开发RAPjava和Project Realjava等无功应用程序的几个库的基础。进一步说,Java9引入了反应流/流API,将此功能嵌入到标准JDK中。流行的Java框架还扩展了对反应式应用程序开发的支持,例如Spring5(于2017年9月正式发布)和SpringBoot2.0(于2018年3月正式发布)。还提供了新的运行时环境/服务器,以支持部署的应用程序(如Netty和Undertow)的完全反应式、无阻塞流。

通常,数据库大数据,反应式编程与基于声明式编程的函数式编程范式相关联,尽管事实上,这不是开发反应式应用程序时唯一可用的方法——在本博客中,我想提请大家注意另一种方法,通过相应的框架包装器,可以使用命令式编程范式将传统的线程阻塞应用程序迁移到反应式非阻塞应用程序。如果函数式反应流编程在最近的Java版本中已经可用并且本机支持,那么我们为什么要评估其他选项呢?其中一个主要原因与潜在的迁移工作有关–在复杂的遗留应用程序中,切换编程范式(即使在技术上可行)也会消耗资源,并且可能会变得不值得为使迁移可靠进行并确保对迁移应用程序的进一步支持而投入的努力。

使用这些论点和动机,让我们进入技术层面。我将在整个博客的演示中使用的应用程序是部署到SCP的cloudfoundry环境中的javaspring启动应用程序。应用程序公开了RESTAPI,可用于查询和检索MongoDB存储库中持久化的数据。springboot2.0(基于spring5框架)包括支持反应式堆栈的模块,以及springframework早期版本中提供的更传统、更常用的模块。Postman将被用来消费api.

相关Spring Boot应用程序的开发已经在Eclipse IDE中进行,并扩展了Spring相关插件,依赖项管理和构建是使用Gradle进行的。

应用程序的源代码和Gradle构建脚本可以在GitHub存储库中找到。

应用程序的基线版本:开发

开始时,我们使用传统概念开发基本的Spring Boot应用程序–这将是我们的基线版本应用程序。

开发的应用程序所需的依赖项:

Spring Web MVC模块(组ID的artefact ID‘Spring boot starter Web’org.springframework.boot启动')–为了能够暴露REST API,Spring Cloud Connectors(组ID的工件ID'Spring Cloud Spring service connector'和'Spring cloudfoundry connector'org.springframework.cloud云')–实现与云提供的服务(如MongoDB服务)的集成,Spring数据MongoDB模块(组ID的工件ID"Spring boot starter Data MongoDB")org.springframework.boot启动')–实现与MongoDB数据库的集成。

我还使用Spring开发工具(工件ID'Spring boot devtools',组ID'org.springframework.boot启动)以促进开发和本地测试已开发的应用程序。

Tomcat用作应用程序的servlet容器。

下面是应用程序的主类:

实现API层的控制器–两个API方法的处理程序:按其唯一标识符查询特定文档(查询最多可返回单个文档)和按其中一个方法查询所有文档非唯一属性(查询可返回文档列表):

MongoDB存储库定义接口:

实体类型/MongoDB文档类型定义类:

云连接器配置类,扫描应用程序运行时可用的所有相关云配置服务:

应用程序的基线版本:部署和测试

开发阶段完成后,应用程序被组装成JAR文件,并将生成的JAR文件部署到云铸造环境中。早前创建的MongoDB服务实例已经插入了一些文档,绑定到部署的应用程序上了

为了演示,高防云服务器,我使用Postman通过向应用程序发送HTTP GET请求来消耗公开的API:

从Cloud Foundry space检索到的应用程序日志,表示发出的请求处理:

应用程序的反应版本:开发