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 社群的所有即將舉行的活動。

檢視全部