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 的坐标不同。新的坐标都位于组 ID io.projectreactor下,而不是以前的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 框架的一些重大更新现已在 Reactor 灵活、异步、快速数据框架的 1.1.0.RELEASE 版本中提供。此版本包含许多错误修复和关键组件的重写,以使其更快,也许更重要的是,在内存使用方面更高效。Reactor 1.1 现在包含来自高盛的出色gs-collections库 [1],该库为处理各种地图和集合提供了非常流畅的 API。

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

它不能仅仅是大数据,它必须是快数据:Reactor 1.0 正式发布

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

我很高兴地宣布,Reactor(一个功能强大的基础库,用于在 JVM 上构建反应式、快速数据应用程序)已达到正式发布版!

什么是 Reactor 以及我为什么要关心它?

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

您应该关心 Reactor,因为具有非人类使用者(如手机及其上运行的应用程序)的现代应用程序会生成比传统每个线程… 更多的数据。

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

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

我很高兴地宣布在通往 1.0 的道路上发布 Reactor的第二个里程碑版本!Reactor 1.0.0.M2 的 Maven 工件在通常的里程碑存储库中可用。

什么是 Reactor?

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

此版本包含什么?

第二个里程碑版本包含许多错误修复和一些非常令人兴奋的新功能。Reactor 现在包含一个Processor抽象,这是一个基于LMAX Disruptor RingBuffer 的高度优化的任务处理器。它使用 Reactor 中的通用抽象来配置 RingBuffer,并允许您使用 Reactor 的通用 API 而不是特定于 Disruptor 的 API。它还在设计上跳过了 Reactor 提供的选择器匹配和动态消费者分配,以便榨取其所能达到的每一滴吞吐量。MacBook Pro 上的轶事基准测试表明,处理器可以通过管道每秒泵送大约 100,000,000 个事件。是的,您没看错:每秒 100百万

1.0.0.M2 还包括 Reactor API 中的一个小但重要的功能,该功能优化了 Reactor 中的事件发布,以获得大约 30-50% 的更高吞吐量。它并不适合所有情况,因为它会从 Reactor 中准备一个优化的消费者列表,但为了每秒额外增加 1000 万个事件的吞吐量,这是一个很棒的新功能。

优化发布

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

// 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。可以在单个表达式中创建完全配置的处理器,并且使用 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 上构建异步、FastData 应用程序。Reactor 1.0.0.M1 中的一些优点包括:反应式组合帮助程序 Stream 和 Promise、TcpServer 和 TcpClient 以及 Groovy 和 Spring 支持。受 Reactive Extenstions、RxJava、新的 JDK 8 Stream API(以及 Scala 等)的启发,这些可组合对象使协调异步任务变得非常简单。它们支持使用 Consumer 的传统回调式编程,但也提供…

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 存储库导出到 Web。它通过将存储库导出到以多种方式可配置的 RESTful URL 来提供一致的交互 API。

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

从根本上进行更改

1.1 版实际上是从头开始重写的。它不仅比 1.0 版更容易配置,并且更好地符合 Spring MVC 对过渡到 Spring 3.2 的期望,而且 Spring Data REST 内部最大的变化是它现在支持除 JPA 之外的其他类型的 Spring Data 存储库实现。无论使用什么后端数据存储,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 现在准备在下一个版本的 spring-data-neo4j(版本 2.3)中支持 Neo4J 的GraphRepository。当该版本普遍可用时(应该在 Spring Data REST 1.1 正式版发布前后),您将能够像使用其他数据存储一样,使用标准的 HATEOAS 语义访问@NodeEntity 及其关系。

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

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

Spring HATEOAS 作者Oliver Gierke 创建了一个示例应用程序,演示了如何在现代 Web 应用程序中使用 HATEOAS 原则。它被称为spring-restbucks,是 REST 服务系统神学中描述的 Restbucks 应用程序的实现:REST 实践,由 Jim Webber、Savas Parastatidis 和 Ian Robinson 撰写。

混合 REST 服务

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

它不是排他的

使用 Spring Data REST 不是非此即彼。如果您不想将所有存储库公开给 Web 客户端,没问题!您可以通过多种不同的方式关闭存储库的功能。您可以在源代码中嵌入注释,或者,如果您无法访问或根本无法添加 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 上了解更多信息

如果您计划参加 4 月份第一周在维也纳举行的 CONFESS_2013,那么您可以在我关于将实体导出到 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 表示结构的更改、对引导到内部 ObjectMapper 的用户定义 Jackson 模块的更好集成,以及与 Spring HATEOAS 的集成。此版本还包括使用 Spring HATEOAS ResourceProcessor 抽象扩展资源表示(例如,添加指向其他相关资源的链接)的支持。

新功能包括

  • JSON 输出外观有所不同,旨在使属性名称一致并使结构更清晰。
  • 提取发现的任何 Jackson 模块 Bean,并将用户配置与内部 ObjectMapper 集成。
  • 与 Spring HATEOAS 集成 - 通过添加或删除链接或以其他方式更改资源来自定义传出的 JSON。

入门 Web 应用程序 | Wiki | 发行说明

要了解有关该项目的更多信息,请访问 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 应用程序 | Wiki | 发行说明

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

领先一步

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

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部