Jon Brisbin

Jon Brisbin

校友
博文Jon Brisbin

Reactor 2.0.0.RC1 现已发布,支持原生 Reactive Streams!

发布 | 2015年2月18日 | ...

Reactor 团队很高兴地宣布发布 2.0.0.RC1 版本,现已在 spring.io Maven 仓库以及 Maven Central 中提供。2.0 版本是 Reactor 1.1 的 #uberupdate,包含了几个新组件以及对 Stream 等重要类的完全重写,现在它实现了 Reactive Streams 标准

请注意,Reactor 2.0 的 Maven 坐标已从 Reactor 1.x 的坐标更改。新的坐标都属于 io.projectreactor 组 ID,而不是之前的 org.projectreactor。Gradle 的依赖块示例...

Reactor 2.0.0.M1 发布,集成 Reactive Streams!

工程 | 2014年10月21日 | ...

Reactor 团队非常兴奋地宣布 Reactor 2.0 的初始里程碑版本!此更新包括在完全重写的 StreamPromise API 中实现完全兼容的 Reactive Streams!这对 Reactor 用户来说是一个巨大的进步。它开启了与其他 Reactive Streams 实现(如 Akka StreamsRatpackRxJava 等)的集成。Reactor 为构建具有高吞吐量和低延迟要求的现代 #uberfastdata 应用程序提供了坚实的基础。

Stream 和 Promise

Reactor 2.0 的主要变化是 Stream API。事实上,代码库的其他大部分在 1.1 和 2.0 之间只是稍作改进或保持不变。但 StreamPromise 则不然。这些组件已完全...

Reactor 1.1.0.RELEASE 现已发布

发布 | 2014年5月6日 | ...

Reactor 团队很高兴地宣布,Reactor 灵活、异步、快速数据框架的 1.1.0.RELEASE 版本现已推出了一些重要更新。此版本包含了大量的 bug 修复和关键组件的重写,以使其更快,也许更重要的是,在内存使用方面更高效。Reactor 1.1 现在包含了高盛 [1] 出色的 gs-collections 库,它为处理各种映射和集合提供了非常流畅的 API。

以下是 Reactor 1.0 和 1 之间更改的非详尽列表...

不能只有大数据,还必须是快速数据:Reactor 1.0 发布 GA 版本

发布 | 2013年11月12日 | ...

我很高兴地宣布,Reactor,一个用于在 JVM 上构建响应式、快速数据应用程序的强大基础库,已达到 GA 版本!

什么是 Reactor?我为什么要关心?

Reactor 提供了必要的抽象,用于构建高吞吐量、低延迟(我们现在称之为“快速数据”)的应用程序,这些应用程序必须处理每秒数千、数万甚至数百万的并发请求。

您应该关心 Reactor,因为具有非人类消费者(例如手机及其上运行的应用程序)的现代应用程序生成的数据量比传统的每线程...

Reactor 1.0.0.M2 – JVM 上响应式快速数据应用程序的基础

工程 | 2013年8月27日 | ...

我很高兴地宣布 Reactor 的第二个里程碑版本,它正在朝着 1.0 版本迈进!Reactor 1.0.0.M2 的 Maven 工件可在常规的里程碑存储库中获取。

什么是 Reactor?

Reactor 是一个基础框架,用于在 JVM 上构建高吞吐量、异步、响应式应用程序。它提供 Selector 风格的事件路由主题匹配、动态 Consumer 分配、一个超快的任务处理器以及响应式 Stream 和 Promise API,用于异步处理数据和协调异步任务。它提供全面的 Groovy 语言支持,通过提供语言扩展,使得用 Groovy 编写 Reactor 应用程序非常 Groovy!它还具有易于使用的 Spring 支持,可以自动将带注解的 POJO 连接到 Reactors。

此版本包含哪些内容?

这个第二个里程碑版本包括了一些错误修复和一些真正令人兴奋的新功能。Reactor 现在包含了一个 Processor 抽象,这是一个基于 LMAX Disruptor RingBuffer 的高度优化任务处理器。它使用 Reactor 的通用抽象来配置 RingBuffer,并允许您使用 Reactor 的通用 API,而不是 Disruptor 特定的 API。它还通过设计跳过了 Reactor 提供的 Selector 匹配和动态 Consumer 分配,以榨取其所能达到的每一个吞吐量。在 MacBook Pro 上的传闻基准测试显示,Processor 每秒可以通过管道处理大约 1 亿个事件。是的,您没有看错:每秒 1 亿个!

1.0.0.M2 还在 Reactor API 中包含了一个虽小但重要的新功能,它优化了 Reactor 中的事件发布,以获得大约 30-50% 的更高吞吐量。它不适用于所有情况,因为它从 Reactor 中准备了一个优化的 Consumer 列表,但对于每秒额外的 1000 万个事件的吞吐量来说,这是一个很棒的新功能。

优化发布

Reactor 的强大之处之一是 Selector 匹配主题(ish)的发布/订阅。它允许您使用主题、匿名对象、可分配类型层次结构、URI 路径匹配或正则表达式(如果您实现自己的领域特定 Selector,则可以使用任何其他类型的 Selector 匹配)轻松地将处理程序分配给事件。但是许多应用程序可以在启动时分配其处理程序,这意味着到这些 Consumer 的路径可以针对高效的事件发布进行优化。新的 Reactor 方法 prepare(Object) 允许您预先选择一个键的 Consumer。它返回一个 Consumer 本身,事件发布者可以使用它来有效地通知新事件。

// Create Environment in which Reactors operate
Environment env = new Environment();
Reactor reactor = Reactors.reactor().env(env).get();

reactor.on($("say.hello"), new Consumer<Event<String>>() {
	public void accept(Event<String> ev) {
		System.out.println("Hello " + ev.getData() + "!");
	}
});

Consumer<Event<String>> sayHello = reactor.prepare("say.hello");
for(String name : listOfNames) {
	sayHello.accept(name);
}

RingBuffer 任务处理器

Reactor 1.0.0.M2 包含了 Processor 抽象。它是一个由 LMAX Disruptor RingBuffer 支持的简单任务处理器,旨在将其无缝集成到 Reactor 中使用的响应式 API 中,因此它使用 Supplier 和 Consumer 等通用抽象。一个完全配置的 Processor 可以在单个表达式中创建,使用 Java 8 lambda 更简洁。

Processor<Message> proc = new ProcessorSpec<Message>()
	.dataSupplier({ return new Message(); })
	.consume({ msg -> // handle the updated Message object…

Reactor 1.0.0.M1 - JVM 上异步快速数据应用程序的基础

工程 | 2013年7月18日 | ...

我非常兴奋地宣布 Project Reactor 的第一个里程碑版本!Project Reactor 是一个基础框架,用于在 JVM 上构建异步、快速数据应用程序。Reactor 1.0.0.M1 中的一些优点包括:响应式组合助手 Stream 和 Promise、TcpServer 和 TcpClient,以及 Groovy 和 Spring 支持。受 Reactive Extensions、RxJava、新的 JDK 8 Stream API(以及 Scala 和其他...)的启发,这些可组合组件使协调异步任务变得非常简单。它们支持使用 Consumers 的传统回调风格编程,但它们也提供了...

Reactor - JVM 上异步应用程序的基础

工程 | 2013年5月13日 | ...

我们很高兴地宣布,经过长时间的内部孵化,我们正在发布一个用于 JVM 上异步应用程序的基础框架,我们称之为 Reactor。它为 Java、Groovy 和其他 JVM 语言提供了抽象,使构建事件和数据驱动的应用程序变得更容易。它也确实非常快。在一般的硬件上,使用最快的非阻塞 Dispatcher,每秒可以处理超过 15,000,000 个事件。还提供其他调度器,为开发人员提供从线程池风格、长时间运行的任务执行到非...

Spring Data REST 1.1.0.M1 发布

发布 | 2013年3月11日 | ...

Spring Data 团队很高兴地宣布,在利用 RESTful 语义将领域对象导出到 Web 方面迈出了重要一步:Spring Data REST 1.1.0.M1 现已在 SpringSource 里程碑存储库中提供。

Spring Data REST 主页 | GitHub 上的源代码 | 参考文档

将领域对象导出到 Web

Spring Data REST 是一组 Spring MVC 组件,您可以将其添加到您自己的 Spring MVC 应用程序中,它使用 RESTful、HATEOAS 语义将您的 Spring Data Repository 导出到 Web。它通过将 Repository 导出到 RESTful URL 来提供一致的交互 API,这些 URL 可以通过几种不同的方式进行配置。

Spring Data REST 支持顶级实体(由 Spring Data Repository 直接管理的那些领域对象)的 CRUD 操作,只需编写一行代码来定义一个扩展 Spring Data CrudRepository 接口的接口。完成此操作后,您的实体将具有完整的 RESTful 语义。您可以使用遵循 HATEOAS 原则的可发现标准 URL 创建新实体、更新现有实体和删除实体。这意味着访问您的 Spring Data REST 应用程序的用户代理无需事先了解您正在导出的资源。它可以通过对 JSON 中提供的 URL 进行连续调用来发现存在的实体以及这些实体上存在的关系。这些“链接”是 HATEOAS REST 应用程序的真正基础和强大之处。

彻底的改变

1.1 版本几乎是从头开始重写的。它不仅比 1.0 更容易配置,并且更好地符合 Spring MVC 对过渡到 Spring 3.2 的预期,而且 Spring Data REST 内部最大的变化是它现在支持除了 JPA 之外的其他类型的 Spring Data Repository 实现。无论使用何种后端数据存储,CRUD 和管理关系(如果数据存储支持)的 HTTP 语义都保持不变。

这意味着现在可以在同一个 Spring Data REST 应用程序中导出 JPA 实体和 MongoDB 实体,并使用通用 URL 结构以及所有实体和集合的标准 Spring HATEOAS 资源表示来访问这些实体。访问这些 RESTful URL 的用户代理无需了解后端实体由哪个数据存储管理,最重要的是,您无需编写任何代码即可获得此功能!

MongoDB 支持

Spring Data REST 1.1 现在支持导出 MongoDB CrudRepository 实现。与 JPA 实体相同的 HTTP 语义适用于 MongoDB @Document 实体。当然支持 GET、POST、PUT、DELETE,也支持 @DBRef。您可以使用 GET、POST、PUT 和 DELETE 查看和管理两个文档之间的关系,并且可以根据您的 @Query 定义导出查找方法。请参考 spring-data-mongodb 参考文档,了解对象映射与 JPA 风格映射的区别以及查询定义的工作方式的完整详细信息。

Gemfire 支持

Spring Data REST 1.1 现在支持将使用高性能 Gemfire 数据库 的实体导出到不同的区域。阅读 Spring Data Gemfire 文档,了解大量配置选项的完整解释以及 Gemfire 中 POJO 映射与其他映射技术的不同之处。

Neo4J 支持即将推出

Spring Data REST 1.1 现已准备好支持 Neo4J GraphRepository,并将在 spring-data-neo4j 的下一个版本 2.3 中实现。当该版本普遍可用时(预计在 Spring Data REST 1.1 RELEASE 普遍可用时或之前),您将能够使用标准的 HATEOAS 语义访问 @NodeEntity 及其关系,就像您使用其他数据存储一样。

将其添加到您现有的应用程序

Spring Data REST 的设计方式是,如果您愿意,可以为 Spring Data REST 应用程序创建整个应用程序。毕竟,它只是一个标准的 Spring MVC Web 应用程序。但是当您将 Spring Data REST 添加到您自己的服务时,事情会变得非常有趣。

Spring HATEOAS 作者 Oliver Gierke 创建了一个示例应用程序,演示了 HATEOAS 原则在现代 Web 应用程序中的使用。它被称为 spring-restbucks,是 Jim Webber、Savas Parastatidis 和 Ian Robinson 在《REST 实战》( Systematic Theology of REST services: REST in Practice) 中描述的 Restbucks 应用程序的实现。

混合 REST 服务

通过将 Spring Data REST 与您的其他 RESTful 服务混合使用,您可以在 Spring Data REST 导出的领域对象(您无需编写任何代码即可公开这些对象)与不代表实际实体而是代表某个过程的服务之间实现无缝集成。您可以在 spring-restbucks 应用程序中看到支付服务如何与领域对象 CRUD 交互的示例,其中信用卡支付处理由自定义控制器处理,而对象 CRUD 则由 Spring Data REST 处理。您的自定义控制器实际上可以与 Spring Data REST URL 结合使用,这样无论 URL 是指向您的自定义控制器、Spring Data REST JPA Repository 还是任何其他受支持的 Repository 样式,都可以在整个应用程序中保持一致且简单的 URL 结构。

这不是排他性的

Spring Data REST 不是非此即彼。如果您不想将所有 Repository 公开给 Web 客户端,没问题!有几种不同的方法可以关闭 Repository 的功能。您可以在源代码中嵌入注解,或者,如果您无法访问或根本无法添加 Spring Data REST 注解,则可以使用流畅的 DSL 风格配置来告诉 Spring Data REST 如何公开您的资源。在您的应用程序中使用 Spring Data REST 并不意味着只承诺一种方式做事。Spring Data REST 的结构使其能够与您现有的应用程序良好配合,因此您可以整合 Spring Data REST 中您想要的功能,同时仍保留您习惯在 Spring MVC 控制器中创建的所有自定义编码服务。

JSONP 支持正在迁移到过滤器

Spring Data REST 1.0 中内置的 JSONP 支持已从核心框架中移除,取而代之的是即将推出的通用 JSONP Servlet 过滤器,它将比 1.0 版本中 JSONP 的实现方式更好。当该过滤器普遍可用时,JSONP 支持不仅可以添加到 Spring Data REST,还可以添加到几乎任何基于 Servlet 的 REST 资源。

安装和文档

要开始使用 Spring Data REST,请查看 参考文档 以了解概况,并通过简单地将依赖项添加到 spring-data-rest-webmvc 工件(当前版本为 SpringSource 里程碑存储库 中的 1.1.0.M1)来开始在您自己的应用程序中使用它,然后导入 Spring Data REST 配置,就像您在 spring-restbucks 应用程序中看到的那样

在 CONFESS_2013 上了解更多信息

如果您计划参加四月第一周在维也纳举行的 CONFESS_2013,那么您可以在我关于将 JPA 实体直接导出到 Web 的演讲中听到所有关于 Spring Data REST 的信息。

链接

Spring Data REST 主页 | GitHub 上的源代码 | 参考文档

Spring Data REST 1.0.0.RC3 发布

发布 | 2012年9月14日 | ...

我很高兴地宣布发布 Spring Data REST 1.0.0.RC3!此版本包含大量的错误修复、JSON 表示结构更改、更好的用户定义 Jackson 模块集成(这些模块引导到内部 ObjectMapper 中),以及与 Spring HATEOAS 的集成。此版本还包括使用 Spring HATEOAS ResourceProcessor 抽象来扩展资源表示(例如,添加指向其他相关资源的链接)的支持。

新增功能包括

  • JSON 输出看起来不同,以使属性名称保持一致且结构更清晰。
  • 提取发现的任何 Jackson Module bean,并将用户配置与内部 ObjectMapper 集成。
  • 与 Spring HATEOAS 集成 – 通过添加或删除链接或以其他方式更改资源来自定义输出 JSON。

入门 Web 应用程序 | 维基 | 发布说明

要了解有关该项目的更多信息,请访问 Spring Data REST 主页,或访问 Github 存储库...

Spring Data REST 1.0.0.RC2 发布

发布 | 2012年7月31日 | ...

我很高兴地宣布 Spring Data REST 1.0.0.RC2 发布!除了许多错误修复之外,此版本还增加了对 JSONPE(带错误处理的 JSONP)的支持,能够使用 @RestResource 注解关闭 CRUD 方法,并且现在已针对 Servlet 3.0 API 进行构建和测试(尽管它尚未专门针对 3.0,因此在 Servlet 2.5 容器中仍可正常工作)。

新增功能包括

  • JSONPE - 只需添加一个 URL 参数,即可将结果包装在您指定的 Javascript 函数调用中。还通过将错误转换为 HTTP 200 并将原始状态码作为错误处理程序的第一参数传递来处理服务器错误。
  • 关闭 CRUD 方法 - 导出器现在遵循 CRUD 方法上的 @RestResource 注解。只需重写您想要关闭的 CrudRepository 中的方法,并使用 @RestResource(exported = false) 进行注解。
  • 更好地与现有 Spring MVC 应用程序集成 - 简化了内部 Spring MVC 配置,使其更容易与您现有的 Spring MVC 应用程序集成。只需在您自己的配置中包含 RepositoryRestMvcConfiguration bean 即可正常工作。

新增或更新的文档包括

入门 Web 应用程序 | 维基 | 发布说明

要了解有关该项目的更多信息,请访问 Spring Data REST 主页,或访问 Github 存储库...

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有