Spring Cloud Stream Brooklyn.M1 已發布

發行 | Marius Bogoevici | 2016 年 8 月 26 日 | ...

我謹代表團隊,很高興宣布 Spring Cloud Stream Brooklyn 發行列車的第一個里程碑版本發布。Spring Cloud Stream Brooklyn.M1 可在 Spring Milestone 儲存庫中使用,其功能的詳細描述可在參考文件中找到。發行說明可在此處取得,其中包含有關遷移路徑的重要資訊。

從單體式架構到發行列車

Spring Cloud Stream Brooklyn.M1 繼承了 Spring Cloud Stream 1.0。命名方案的變更反映了專案的結構性變更,特別是從單體式結構(核心組件和綁定器實作包含在一起)切換到更分散式的結構。在新的結構中,核心和綁定器實作是獨立的專案,具有自己的發行節奏。發行列車 BOM 將發行組件聚合在一起並管理其版本。

這種方法的好處有兩個。一方面,它允許更快地為個別實作新增功能和修復錯誤。另一方面,它降低了建立和開發新綁定器的門檻,這些綁定器在成熟後,只需新增到發行列車 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 已升級為使用 Kafka 新消費者程式庫(在 0.9 版本中引入),基於 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,目前支援 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 之外,此版本還引入了對反應式 API 的支援,基於 Project Reactor。此功能需要使用 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 的主題演講、Spring One Platform 上的其他反應式演講之一,或閱讀 Dave Syer 的 部落格系列

Avro 序列化與結構描述演進支援

Spring Cloud Stream Brooklyn.M1 也新增了對 Avro 和結構描述演進的支援。從此版本開始,應用程式可以包含 spring-cloud-stream-schema 模組,其中包含帶有 Apache Avro 的 MessageConverters

Apache Avro 序列化器支援固定結構描述,以及與結構描述登錄檔動態互動。您可以讓您的應用程式與結構描述登錄檔互動,只需在您的應用程式中新增 @EnableSchemaRegistryClient 並在您的出站通道上設定 application/*+avro 內容類型,以便以 Apache Avro 格式傳送資料。這樣一來,發布者應用程式將註冊它們傳送的訊息的結構描述,並將有關主題和版本的元資料傳遞給消費者。基於此,消費者可以從登錄檔中檢索寫入器的結構描述,並反序列化它接收到的訊息,即使結構描述事先對它們來說是未知的。

這是微服務演進的一項重要功能,因為它允許系統的不同組件升級或變更其結構描述和資料格式,而不會破壞現有的組件。

此版本包含結構描述登錄檔伺服器和通用結構描述登錄檔用戶端。適用於 Confluent 結構描述登錄檔的結構描述登錄檔用戶端實作也已發布。

特別感謝 Vinicius Carvalho 貢獻結構描述演進支援!

接下來是什麼?

在接下來的幾週內,我們將繼續開發 Brooklyn 發行列車,目標是產生候選發行版本。按照里程碑版本的慣例,在 RC 版本之前預計會有一些 API 變更。以下是最終版本之前計劃新增的一些功能

  • 新增對 Apache Kafka 0.10 的支援,透過簡單地替換 Spring Kafka 程式庫為 1.1 版本;
  • 新增對反應式綁定器 (Reactive binders) 的支援 (包括反應式生產者和消費者,例如 Reactor Kafka 專案所引入的那些);
  • 新增對使用 Kafka Stream API 開發應用程式的支援;

而且,一如既往,我們歡迎各位提供意見回饋:無論是在 GitHub 上、Stack Overflow 上,還是在 Twitter 上。

取得 Spring 電子報

隨時掌握 Spring 電子報的最新資訊

訂閱

領先一步

VMware 提供訓練與認證,加速您的進展。

瞭解更多

取得支援

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

瞭解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

檢視全部