領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多這是系列部落格文章的第一篇,旨在闡明並預覽即將發布的 spring-cloud-stream 和 spring-cloud-function (皆為 3.0.0) 的內容。
最近,我與一位使用者進行了討論,聽到了一些促使我開始撰寫一系列部落格文章(從這篇開始)的內容,目的是為了揭開 *Spring Cloud Stream* 和 *Spring Cloud Function* 專案的真正目標,並展示它們的新功能。
促使我撰寫本文的特定短語是 - "Spring Cloud Stream,是一個輕量級的 Spring Integration 輸入/輸出路由器..."。這是一個有趣的看法,但我不得不反對。雖然它可能受到企業集成模式 (EIP) 的啟發,並且建立在 Spring Integration (SI) 之上,但最後一部分實際上只是一個實作細節。Spring Cloud Stream (SCSt) 作為一個框架,從來就不是 "一個輕量級的 Spring Integration 輸入/輸出路由器"。事實上,這種說法顯示了問題的一部分,即 SI(選擇用來支援 SCSt 某些內部需求的框架)在某種程度上被認為是 SCSt 的核心,以至於許多人認為 SCSt 是 SI 的擴展或包裝。事實並非如此。它一直都是關於純粹的微服務,並將它們綁定到資料的 *來源* 和 *目標* (即,消息傳遞系統)。就這麼簡單。如果您從知道 SCSt 的內部運作方式中抽象出來,您很快就會意識到它實際上是一個綁定和啟動框架。它將一段程式碼(由使用者提供)綁定到 binder 公開的資料來源/目標,並根據 binder 實作啟動此程式碼(例如,訊息到達等等)。就這樣。
在歷史上,Spring Cloud Stream 公開了一個基於註解的配置模型,該模型要求使用者提供大量可以輕鬆推斷出的資訊,從而簡化了配置。
讓我們看一下以下兩個程式碼片段
基於註解
@SpringBootApplication
@EnableBinding(Processor.class)
public class SampleApplication {
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public String uppercase(String value) {
return value.toUpperCase();
}
}
基於函數 (自 v2.1.0 起)
@SpringBootApplication
public class SampleApplication {
@Bean
public Function<String, String> uppercase() {
return value -> value.toUpperCase();
}
}
兩者都是有效且功能齊全的 SCSt 應用程式。兩者都做同樣的事情,並且都產生相同的結果 - 只是在基於註解的範例中,使用者必須了解 SCSt 抽象(即,消息傳遞、通道、綁定等等),而實際的使用者程式碼與它們沒有任何關係。這提出了一個問題:為什麼?Spring 一直都是關於 “您擔心功能需求,而我們負責非功能(樣板程式碼)”。因此,在 SCSt 作為一個框架及其“綁定和啟動/觸發”的核心目標的背景下,我們很快意識到這些抽象是樣板程式碼,不應洩漏到使用者的程式碼中,特別是以註解的形式,因為它們對 SCSt 的程式碼造成了不必要的二進制依賴性。此外,鑑於 Spring 產品組合中大多數新框架的基礎是 Spring Boot,請考慮 Spring Boot 的核心訊息 - 依賴項(例如,JAR)包括自動配置,這實際上是 我們 (Spring) 認為事情應該如何運作的觀點,同時讓您能夠選擇退出。因此,在這種情況下,為什麼您需要提供如此多的指令,特別是通過註解(EnableBinding、Processor、StreamListener
等等),在這種情況下,可以通過簡單地遵循一些慣例來輕鬆提取或推斷相同的資訊(在 SCSt 的背景下)。例如,在 SCSt 的背景下,函數 bean 是一個處理器。我們知道一個處理器只有一個輸入目的地和一個輸出,並且我們知道它們的名稱,那麼為什麼我們需要明確聲明已知和顯而易見的事實?等等... 另外,請記住,在推導所有這些的同時,我們仍然保留了現有消費者和生產者屬性以及所有其他配置選項的使用。它們仍然適用於此處,讓您可以配置和重新配置與使用 StreamListener
相同的事情。
因此,我也想說的是,我們正在開始我們的緩慢旅程,從基於註解的程式設計模型轉向更敏捷、簡單且與 Spring Boot 對齊的、明確記錄且直觀的慣例,並且使用者需要很少的開箱即用配置的觀點式模型。
有關 spring-cloud-stream 中函數式支援的最新資訊,請關注此 連結。
請隨時提供任何回饋。