Jon Brisbin

Jon Brisbin

校友
博文 作者:Jon Brisbin

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

发布 | 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 的依赖块示例...

集成 Reactive Streams 的 Reactor 2.0.0.M1 已发布!

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

Reactor 团队坦率地说,终于能够宣布 Reactor 2.0 的第一个里程碑版本,我们有些兴奋!这次更新在完全重写的 StreamPromise API 中包含了完全符合 Reactive Streams 标准的实现!这对 Reactor 用户来说是巨大的一步。它开启了与 Akka Streams、Ratpack、RxJava 等其他 Reactive Streams 实现的集成。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 现在包含了高盛 [1] 出色的 gs-collections 库,该库提供了非常流畅的 API 来处理各种映射和集合。

以下是 Reactor 1.0 和 1.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 Artifacts 可以在常规的里程碑仓库中获取。

什么是 Reactor?

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

此版本中有哪些新内容?

这第二个里程碑版本包含了一些错误修复和一些令人兴奋的新特性。Reactor 现在包含了一个 Processor 抽象,这是一个基于 LMAX Disruptor RingBuffer 的高度优化的任务处理器。它使用 Reactor 的通用抽象来配置 RingBuffer,并允许您使用 Reactor 的通用 API 代替 Disruptor 特定的 API。它还特意跳过了 Reactor 提供的 Selector 匹配和动态 Consumer 分配,以尽可能榨取每一滴吞吐量。根据在 MacBook Pro 上的非正式基准测试显示,Processor 每秒可以通过管道处理大约 100,000,000 个事件。是的,您没看错:每秒 1 亿

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

优化发布

Reactor 的强大之处之一是 Selector 匹配的主题式 (topic-ish) 发布/订阅。它允许您使用主题、匿名对象、可分配类型层次结构、URI 路径匹配或正则表达式(或任何其他类型的 Selector 匹配,如果您实现自己的特定领域 Selector)轻松地为事件分配处理程序。但许多应用可以在启动时分配其处理程序,这意味着到这些 Consumers 的路径可以优化,以实现高效的事件发布。新的 Reactor 方法 prepare(Object) 允许您为一个 key 预先选择 Consumers。它返回一个 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 lambdas 则更简洁。

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 Extenstions、RxJava、新的 JDK 8 Stream API(以及 Scala 等)的启发,这些 Composables 使协调异步任务变得异常简单。它们支持使用 Consumers 的传统回调式编程,但也提供...

Reactor - JVM 上异步应用的基础

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

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

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 Repositories 导出到 Web。通过将 Repository 导出到可以通过几种不同方式配置的 RESTful URL,它提供了一个一致的交互 API。

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

彻底的改变

版本 1.1 几乎是彻底重写。它不仅比 1.0 更易于配置,并且更好地符合 Spring 3.2 过渡对 Spring MVC 的期望,而且 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 实现。适用于 MongoDB @Document 实体的 HTTP 语义与适用于 JPA 实体的相同。当然支持 GET、POST、PUT、DELETE,@DBRef 也支持。您可以使用 GET、POST、PUT 和 DELETE 查看和管理两个文档之间的关系,并且可以根据您的 @Query 定义导出查找方法。请参考 spring-data-mongodb 参考文档,了解对象映射与 JPA 风格映射的不同之处以及查询定义的工作原理的完整详细信息。

Gemfire 支持

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

接下来将支持 Neo4J

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

将其添加到现有应用中

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

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

混合 REST 服务

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

并非排他性

使用 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 artifact(当前版本为 1.1.0.M1,位于 SpringSource 里程碑仓库中)的依赖项添加到您的应用中,然后导入 Spring Data REST 配置,就像您在 spring-restbucks 应用中看到的那样,即可开始使用。

在 CONFESS_2013 了解更多

如果您计划参加四月第一周在维也纳举行的 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 Modules,以及与 Spring HATEOAS 的集成。此版本还包含了使用 Spring HATEOAS ResourceProcessor 抽象扩展资源表示(例如,添加指向其他相关资源的链接)的支持。

新功能包括

  • 为了使属性名称一致且结构更清晰,JSON 输出看起来有所不同。
  • 拉取所有发现的 Jackson Module bean,并将用户配置与内部 ObjectMapper 集成。
  • 与 Spring HATEOAS 集成 - 通过添加或移除链接或以其他方式修改资源来定制传出的 JSON。

Starter 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 包含到您自己的配置中即可正常工作。

新增或更新的文档包括

Starter Web 应用 | Wiki | 发布说明

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

提升自己

VMware 提供培训和认证,助力您的职业发展。

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部