領先一步
VMware 提供培訓和認證,助您加速前進。
瞭解更多代表團隊,我很高興宣佈 Spring Cloud Stream Brooklyn 釋出系列的第一個里程碑版本已釋出。Spring Cloud Stream Brooklyn.M1 可在 Spring 里程碑倉庫中使用,其詳細功能說明可在參考文件中找到。釋出說明在此,其中包含重要的遷移路徑資訊。
Spring Cloud Stream Brooklyn.M1 繼承了 Spring Cloud Stream 1.0。命名方案的變化反映了專案的結構性調整,特別是從核心元件和 Binder 實現捆綁在一起的單體結構轉變為更加去中心化的結構。在新結構中,核心和 Binder 實現是獨立的,擁有各自的釋出節奏。釋出系列的 BOM 彙集了釋出元件並管理它們的版本。
這種方法的好處是雙重的。一方面,它允許以更快的速度為各個實現新增新功能和修復。另一方面,它降低了建立和開發新 Binder 的門檻,這些 Binder 成熟後,只需新增到釋出系列 BOM 中,就可以成為未來發布系列的一部分。最後,一個旨在開發微服務的專案本身不應該是單體應用,這是理所當然的!
以下元件是 Brooklyn.M1 釋出系列的一部分
讓我們看看新版本帶來了什麼。
Spring Cloud Stream Brooklyn.M1 對現有元件進行了一些重大升級,並引入了針對程式設計模型、應用互操作性以及整體開發者體驗的新功能。
Apache Kafka Binder 已升級,基於 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,使用 Kafka 新版消費者庫(0.9 版本引入),當前支援 Apache Kafka 0.9。使用新客戶端庫帶來了一些好處
spring.cloud.stream.instanceIndex
。新的消費者庫將負責為屬於同一消費者組的所有例項分配分割槽,並在新例項加入或離開時進行再平衡——這對於在執行時擴充套件消費者應用尤其有用。對於仍希望使用靜態分割槽分配方案的使用者,我們將在最終版本中支援它(在這種情況下仍需要設定 spring.cloud.stream.instanceIndex
)。Spring Kafka 和 Spring Integration Kafka 的抽象也將使新增對 Apache Kafka 0.10 的支援更加容易,預計最終版本也將支援 Kafka 0.10。
除了版本 1.0 中已有的 Spring Integration 應用模型和 @StreamListener
,此版本引入了對基於 Project Reactor 的響應式 API 的支援。此功能需要使用 Java 8。
應用可以新增 spring-cloud-stream-reactive
模組作為依賴,從而直接使用響應式型別作為程式設計抽象。在資料處理上下文中,函式式和響應式程式設計模型非常吸引人,因為響應式組合 API 具有宣告性和表達性,讓開發者能夠專注於*做什麼*,而不是*如何做*。另一方面,雖然逐條處理訊息是企業整合的經典範式,但在流處理中,開發者還需要考慮處理連續的入站訊息流,並描述僅在該上下文中有意義的操作,如視窗(按時間或數量)。
下面是一個響應式處理器示例,用於統計詞語(以確定過去 5 秒內每秒最熱門的標籤)。
@StreamListener
@Output(Processor.OUTPUT)
public Flux<WordCount> count (@Input(Processor.Input) Flux<String> flux) {
return flux.window(ofSeconds(5), ofSeconds(1))
.flatMap(window ->
window.groupBy(word -> word)
.flatMap(group -> group.reduce(0, (count,word) -> count + 1)
.map(count -> new WordCount(group.key(), count))));
}
此外,使用響應式 API 可以與其他的響應式元件整合,例如響應式 Web 控制器。要更全面地瞭解 Spring 中即將到來的響應式支援,請觀看 Stephane Maldini 和 Rossen Stoyanchev 在 Spring One Platform 2016 上的主旨演講,或其他關於響應式的演講,或閱讀 Dave Syer 的系列部落格文章。
Spring Cloud Stream Brooklyn.M1 還增加了對 Avro 和 schema 演進的支援。從這個版本開始,應用可以包含 spring-cloud-stream-schema
模組,其中包含帶有 Apache Avro 的 MessageConverters
。
Apache Avro 序列化器支援固定 schema,也支援與 schema registry 動態互動。您可以透過簡單地在應用中新增 @EnableSchemaRegistryClient
並將出站通道的內容型別設定為 application/*+avro
,使您的應用與 schema registry 互動,以便資料以 Apache Avro 格式傳送。這樣,釋出者應用將註冊它們傳送的訊息的 schema,並將關於主題和版本的資訊傳遞給消費者。基於此,消費者可以從 registry 中檢索寫入者的 schema 並反序列化接收到的訊息,即使他們之前不知道該 schema。
這對於微服務的演進是一個重要的功能,因為它允許系統中的不同元件升級或更改它們的 schema 和資料格式,而不會破壞現有的。
該版本包含一個schema registry server和一個通用schema registry client。還提供了針對Confluent schema registry的 schema registry client 實現。
特別感謝 Vinicius Carvalho 對 schema 演進支援的貢獻!
在接下來的幾周,我們將繼續開發 Brooklyn 釋出系列,目標是釋出一個候選版本 (release candidate)。按照里程碑版本的慣例,在 RC 版本之前可能會有一些 API 變更。以下是最終版本釋出前計劃增加的一些額外功能
和往常一樣,我們歡迎反饋:可以透過 GitHub、Stack Overflow 或 Twitter。