領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多我們很高興宣布 Spring Cloud Task 1.0.0.M2 的發佈。這是 Spring Cloud Task 專案的第二個里程碑版本,包含一些令人興奮的新功能!
在 Spring Cloud Task 的 M1 版本中,我們引入了任務的概念、@EnableTask
註解,以及具有終點的微服務的一般概念。自那時以來,我們一直非常忙碌。以下是一些新功能的重點,包括:
讓我們看看這些各自包含哪些內容。
在任務執行前後(或兩者)執行邏輯可能很有用。此版本引入了介面 TaskExecutionListener
,以及註解 @BeforeTask
和 @AfterTask
,讓使用者可以定義在任務執行之前或完成後執行的邏輯。
將 Spring Cloud Task 與 Spring Cloud Stream 整合,為開發人員創建了一個強大的工具來協調資料微服務。在此 Spring Cloud Task 版本中,我們在這兩個專案之間新增了一些整合點。
第一個整合點是能夠根據透過串流發送的消息啟動任務。透過使用 @EnableTaskLauncher
註解和正確的相依性建立 Boot 應用程式,您將擁有一個 Spring Cloud Stream Sink,用於監聽 TaskLaunchRequest
消息。對於接收到的每條消息,啟動器 Sink 都將啟動請求的任務。
@SpringBootApplication
@EnableTaskLauncher
public class TaskSinkApplication {
public static void main(String[] args) {
SpringApplication.run(TaskSinkApplication.class, args);
}
}
在撰寫本文時,本地和 Apache YARN 的啟動器都已可用,而 CloudFoundry、Apache Mesos 和 Kubernetes 的啟動器目前都在開發中。
Spring Cloud Task 和 Spring Cloud Stream 之間的另一個整合點是 Spring Cloud Task 能夠將事件發佈到 Spring Cloud Stream 通道。將 spring-cloud-task-stream
相依性(以及您選擇的 Spring Cloud Stream binder)新增到您的專案後,任務將在任務開始和結束時自動發出消息。具體來說,任務將在每個時間點發出 TaskExecution
,讓上游應用程式在任務開始以及結束和結果時收到通知。
使用 Spring Cloud Task 的常見用例是執行 Spring Batch 作業。因此,我們在新模組 spring-cloud-task-batch
中在這兩個專案之間新增了幾個有趣的整合點。
第一個整合點是透過 Spring Cloud Stream 通道發送批次資訊消息。與 Spring XD 容器提供的功能類似,作為任務執行的批次作業(具有適當的相依性)可以發送資訊消息,而無需額外配置。以下監聽器會發出某種類型的事件:
JobExecutionListener
StepExecutionListener
ChunkListener
ItemReadListener
ItemProcessListener
ItemWriteListener
SkipListener
第二個整合點是一個新的 PartitionHandler
,即 DeployerPartitionHandler
。此 PartitionHandler
實作允許遠端分割批次作業中的 worker 作為任務啟動,而不是預先部署並要求監聽工作。這樣做的好處是,worker 只在執行工作時才部署和執行,並且在工作完成後應關閉和清理。DeployerPartitionHandler
將任務的啟動委派給 Spring Cloud Deployer 實作,因此任何支援任務啟動的 deployer 實作都可以與這個新的 PartitionHandler
一起使用。
了解事物如何運作的最簡單方法是實際看到它們運作。因此,我們擴充了我們的範例模組,以提供此處提及的所有功能以及一些更基本的使用案例的範例。您可以在 Github 上查看我們的新範例。
在我們發佈 RC 版本之前,我們還有一些工作要做,這應該與 Spring Cloud Data Flow 的相關版本保持一致。我們將忙於處理 Spring Cloud Task 內部的任何最終問題,並提供 Spring Cloud Data Flow 需要的任何其他內容。
Spring Cloud Task 是一個令人興奮的新專案,我們認為它填補了企業開發中服務不足的領域。但是,我們想知道您的想法。請透過 Github Issues 、StackOverflow 或直接在 Twitter 上告訴我們!