搶先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多我們很高興宣布 Spring Cloud Stream applications 2020.0.0-M2 的發佈。此版本是對舊版 Spring Cloud Stream App Starters 的全面改版。從此版本開始,我們將從以主題為導向的發佈列車名稱(按字母順序排列的著名科學家)轉向基於日曆的版本控制。目前的 GA 發佈版本稱為 Einstein,我們很高興推出 2020.0.0-M2。我們也正在逐步淘汰 app starters。經過重組、重新封裝以及(在某些情況下)重寫底層程式碼後,我們現在有了一個新的 Git 儲存庫:spring-cloud/stream-applications:用於資料驅動微服務的函數和 Spring Cloud Stream 應用程式。
自 2016 年 Spring Cloud Data Flow 成立以來,Spring 團隊一直維護基於 Spring Cloud Stream 建構的預先封裝應用程式。這些是生產就緒的應用程式,建立在 Spring 和 Spring Integration 久經驗證的功能之上,可提供與常用開源資料儲存、訊息代理程式、線上服務和通訊協定的開箱即用整合。事實上,我們已經為企業開發人員提供用於建構關鍵業務系統的底層組件超過十年了。下面的時間軸總結了從 Spring Integration 組件到預先封裝應用程式的演變過程。
當您使用 Data Flow 編排資料串流管線或直接將它們用作資料微服務時,這些應用程式可讓您快速入門。與 Spring 的理念一脈相承,我們始終為您完成繁重的工作,讓您專注於業務邏輯。
Spring Cloud Stream 應用程式的核心是一個 Spring Boot 應用程式(uber jar),其中包含 Spring Cloud Stream binder 相依性。binder 公開了一個服務提供者介面,用於抽象化利用底層訊息中介軟體(例如 Apache Kafka、RabbitMQ、Amazon Kinesis、Google Pub Sub 和 Solace)進行分散式通訊的實作,從應用程式中隱藏了中介軟體的特定詳細資訊。因此,應用程式不知道它正在使用哪個底層中介軟體進行通訊。
這種架構使我們能夠在沒有 binder 的情況下實作核心功能,就像 Spring Cloud Stream App Starters 一樣。一個自訂 Maven 外掛程式用於產生 Maven pom 檔(Apache Kafka binder 和 RabbitMQ binder 各一個)和一個通用 Spring Boot main 類別,該類別匯入 app starter 組態。pom 檔還包含 監控 和安全支援。預先封裝的串流應用程式可與 Apache Kafka 或 RabbitMQ 搭配使用,並以 Spring Boot 可執行 jar 檔和 Docker 映像發佈到公用儲存庫。
在許多方面,預先封裝的串流應用程式可以與 Kafka Connect 相媲美。雖然這不是直接的蘋果對蘋果的比較,但串流應用程式可以用來取代 Kafka connect 應用程式。Kafka Connect 應用程式需要 Apache Kafka 來產生和使用資料,而 Spring Cloud Stream 應用程式可與各種中介軟體技術搭配使用,包括先前提及的 Kafka。請注意,我們所有的預先封裝應用程式都是免費且開源的,而許多 Kafka 連接器都是商業授權的。
Java 和 Spring 生態系統的持續進步推動我們重新思考我們的方法。最顯著的變化是我們實作了一個分層架構,其中先前由 app starters 提供的核心功能現在作為 Java 函數提供,實作了在 java.util.function 套件中找到的標準介面。
此版本中的函數式組件可以作為標準 Spring bean 公開,然後透過直接將它們嵌入到應用程式中來滿足您的資料整合需求。透過在自訂應用程式中注入這些函數,您可以立即受益於底層程式庫提供的功能。例如,Spring Integration 配接器在許多這些函數中使用。您可以直接調用該函數,使用 Spring Cloud Function 透過 REST 端點調用它,或在無伺服器環境中使用它。與 app starters 不同,函數式組件不依賴 Spring Cloud Stream。但是,它們現在是串流應用程式的核心組件。下圖顯示了組件和應用程式之間的關係
透過使用 Spring Cloud Stream,我們可以利用 java.util.function 類型(Supplier、Function、Consumer)與 Spring Cloud Stream 概念(分別為 source、processor 和 sink)的邏輯等價性。和以前一樣,我們使用新的和改進的 Maven 外掛程式 來產生 Spring Boot main 類別、application.properties 檔案和具有內建 監控 和安全支援的 binder 特定 Maven pom 檔。除了少數例外情況外,我們可以在沒有額外程式碼的情況下建構 Spring Cloud Stream 應用程式。
新方法提供了幾個優勢
下圖透過使用封裝為 Spring Cloud Stream 應用程式的簡單函數來說明了這個概念。binder 實作和外部組態屬性使應用程式能夠透過訊息代理程式進行通訊,但應用程式程式碼不關心任何這些。每當訊息到達 time 主題時,Spring Cloud Stream 都會在 ProcessorApplication 中調用 helloTime Function,並將其輸出導向 hello 主題。同樣地,SinkApplication 中的 printTime Consumer 由到達 hello 主題的訊息觸發。但是什麼觸發了 SourceApplication?您可能已經猜到,Spring Cloud Stream 自動組態了一個輪詢器,它(預設情況下)每秒調用一次 currentTime Supplier。當然,這是可組態的。
函數式組件可用於封裝和部署在 Spring Cloud Stream 以外的各種用途中,尤其是在 FaaS 環境中。
函數式組件使用 Project Reactor 建構,在適當的情況下,以啟用非阻塞反應式串流。
串流應用程式(或任何使用函數式組件建構的 Spring Boot 應用程式)都可以利用 Spring Cloud Function 的宣告式函數組合功能。這表示預先封裝的串流應用程式可以組態為執行常見的轉換和篩選操作,而無需任何自訂。
新的 stream-applications Git 儲存庫是一個 monorepo。與 stream-cloud-app-starters 不同,在後者中,每個應用程式都有自己的儲存庫,而新的 stream-applications 儲存庫在單個儲存庫中包含所有內容(函數、應用程式和通用組件)。這簡化了相依性管理並允許原子提交。希望這種改變,以及其他正在進行的努力,將使開發人員更容易並有助於鼓勵社群貢獻。
以下是此版本中提供的各種函數和應用程式的部分清單
供應器和來源:檔案、FTP、SFTP、AWS S3、HTTP、Geode、TCP、時間、Twitter、Websocket、JDBC、JMS、RabbitMQ、MQTT。
消費者和接收器:分析、Cassandra、檔案、FTP、Geode、JDBC、日誌、Mongodb、MQTT、Rabbit、Redis、AWS S3、SFTP、TCP、Twitter、Wavefront、Websocket。
函數和處理器:篩選器、標頭豐富器、HTTP 請求、Tensorflow(影像辨識、物件偵測和語義分割)、SpEL、分割器、任務啟動請求、任務啟動器、Twitter。
請參閱 Stream Applications README 以取得完整清單。
在許多情況下,新的應用程式提供了與以前版本相同的功能。在某些情況下(例如 Twitter),我們顯著增強了功能。我們也合併和重新命名了一些應用程式。簡而言之,存在一些重大變更。值得注意的是,許多組態屬性名稱已變更,在適當的情況下,以反映與函數式組件的關聯(例如,s3.supplier.remoteDir)。此外,這些應用程式可能無法與使用舊版 Spring Cloud Stream 建構的串流應用程式搭配使用。例如,使用舊版 Spring Cloud Stream 建構的來源不能保證與此版本中的接收器搭配使用。如果您已經在使用以前版本的預先封裝應用程式,則無需立即升級,除非您迫切需要利用某些新功能。Einstein 發佈列車將進入維護模式,因此它將僅包含未來的錯誤修復。所有新開發都將應用於未來版本。
如果您在現有的函數和應用程式目錄中找不到您要尋找的內容,請考慮 貢獻。這樣,整個開源社群都將受益。在後續文章中,我們將逐步介紹開發函數和串流應用程式的實際範例。
我們鼓勵社群參與此專案。我們有幾個標記為 非常適合貢獻 的開放問題。除了程式碼貢獻外,我們非常感謝文件改進、建立問題和為儲存庫加星號。
本部落格是每週系列的第 1 篇,該系列將更詳細地介紹此處介紹的主題。在接下來的幾週內,請關注更多深入探討和重點主題。我們將帶您了解此儲存庫中包含的組件和周圍流程的整個概況。