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 現在包含 Goldman Sachs [1] 的出色 gs-collections 程式庫,該程式庫提供非常流暢的 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 日 | ...

我很高興宣布Reactor 的第二個里程碑版本,我們正在朝向 1.0 前進! 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 個事件。 是的,您沒看錯:每秒 1 億個!

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 等其他程式)的啟發,這些 Composables 使協調非同步任務變得非常簡單。 它們支援使用消費者的傳統回呼樣式程式設計,但它們也提供…

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 Resource 表示法來存取這些實體。存取這些 RESTful URL 的使用者代理程式不需要任何關於後端實體是由哪個資料儲存區管理的特殊知識,最重要的是,您不需要編寫任何程式碼即可獲得該功能!

MongoDB 支援

Spring Data REST 1.1 現在支援匯出 MongoDB CrudRepository 實作。與 JPA 實體一樣,相同的 HTTP 語意也適用於 MongoDB @Document 實體。當然支援 GET、POST、PUT、DELETE,@DBRef 也是。您可以使用 GET、POST、PUT 和 DELETE 來檢視和管理兩個文件之間的關係,並且可以根據您的 @Query 定義匯出 finder 方法。請參考spring-data-mongodb 參考文件,以取得物件映射與 JPA 樣式映射的不同之處,以及查詢定義如何運作的完整詳細資訊。

Gemfire 支援

Spring Data REST 1.1 現在支援匯出使用高效能 Gemfire 資料庫 到不同 Regions 的實體。請閱讀 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,是 Restbucks 應用程式的一個實作,該應用程式描述於 Systematic Theology of REST services: REST in Practice,作者是 Jim Webber、Savas Parastatidis 和 Ian Robinson。

混合 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 註解,則可以使用 fluent、DSL 樣式的配置來告訴 Spring Data REST 應如何公開您的資源。在您的應用程式中使用 Spring Data REST 並非僅以一種方式做事的專有承諾。Spring Data REST 的結構方式是它會與您現有的應用程式良好協同工作,因此您可以整合您想要的 Spring Data REST 的那些功能,同時仍然維護您習慣在 Spring MVC 控制器中建立的所有自訂程式碼服務。

JSONP 支援移至篩選器

Spring Data REST 1.0 中內建的 JSONP 支援已從核心架構中移除,取而代之的是即將推出的通用 JSONP Serlvet Filter,該篩選器的工作效果將遠優於 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,那麼您可以在我關於將實體匯出到 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。

入門 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 儲存庫以…

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多資訊

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

檢視所有