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 繫結器 1.1.0.M1
  • Spring Cloud Stream Rabbit 繫結器 1.1.0.M1

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

有什麼新功能?

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

Apache Kafka 0.9 新消費者支援

Apache Kafka 繫結器已升級為使用 Kafka 新消費者庫(版本 0.9 引入),基於 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,目前支援 Apache Kafka 0.9。使用新客戶端庫帶來了幾個好處:

  • 使用 Apache Kafka 繫結器的應用程式無需設定 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 上的主題演講,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 更改。以下是最終版本之前計劃的一些附加功能:

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

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

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

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

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

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

檢視所有