Spring Cloud Stream Brooklyn.M1 已釋出

釋出 | Marius Bogoevici | 2016年8月26日 | ...

代表團隊,我很高興宣佈 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 1.1.0.M1 (核心元件)
  • Spring Cloud Stream Kafka Binder 1.1.0.M1
  • Spring Cloud Stream Rabbit Binder 1.1.0.M1

讓我們看看新版本帶來了什麼。

新特性?

Spring Cloud Stream Brooklyn.M1 對現有元件進行了一些重大升級,並引入了針對程式設計模型、應用互操作性以及整體開發者體驗的新功能。

支援 Apache Kafka 0.9 新版消費者

Apache Kafka Binder 已升級,基於 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,使用 Kafka 新版消費者庫(0.9 版本引入),當前支援 Apache Kafka 0.9。使用新客戶端庫帶來了一些好處

  • 使用 Apache Kafka Binder 的應用無需設定 spring.cloud.stream.instanceIndex。新的消費者庫將負責為屬於同一消費者組的所有例項分配分割槽,並在新例項加入或離開時進行再平衡——這對於在執行時擴充套件消費者應用尤其有用。對於仍希望使用靜態分割槽分配方案的使用者,我們將在最終版本中支援它(在這種情況下仍需要設定 spring.cloud.stream.instanceIndex)。
  • 支援使用 SSL 和 Kerberos 的安全客戶端

Spring Kafka 和 Spring Integration Kafka 的抽象也將使新增對 Apache Kafka 0.10 的支援更加容易,預計最終版本也將支援 Kafka 0.10。

響應式程式設計支援 (使用 Java 8)

除了版本 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 的系列部落格文章

Avro 序列化和 schema 演進支援

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 變更。以下是最終版本釋出前計劃增加的一些額外功能

  • 透過簡單替換 Spring Kafka 庫到 1.1 版本,增加對 Apache Kafka 0.10 的支援;
  • 增加對響應式 Binder 的支援(包括響應式生產者和消費者,例如 Reactor Kafka 專案引入的那些);
  • 增加對使用 Kafka Stream API 開發應用的支援;

和往常一樣,我們歡迎反饋:可以透過 GitHubStack OverflowTwitter

獲取 Spring 新聞通訊

保持與 Spring 新聞通訊的聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速前進。

瞭解更多

獲取支援

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

瞭解更多

即將舉辦的活動

檢視 Spring 社群即將舉辦的所有活動。

檢視全部