3

我們有許多批量作業,今天通過cron表達式在單個應用程序中安排。我們希望更多地分離這些工作,並將其轉移到春季雲任務。每個春季雲任務觸發器是否需要一個JVM進程?

但是閱讀文檔[1],我得出結論,我必須使用triggertask(源代碼),然後發送TaskLaunchRequesttasklauncher(接收器)以最終啓動新過程。

這意味着(如果我只有一個任務/批)我需要至少以下JVM進程運行以觸發一個新的過程:

  • 流服務器
  • triggertask(源)
  • tasklauncher (sink)

OK,流服務器和tasklauncher將爲任何即將到來的任務共享,但triggertask只能爲單個任務使用cron定義,因此必須複製fo r任何即將到來的任務定義。所以我需要至少一個「保姆流程」來完成每項任務?

真的嗎?這聽起來像是一個巨大的矯枉過正......從我的角度來看,我期望cron調度是任務定義的核心功能,因此唯一需要的就是流量服務器。

我理解這是否正確或有什麼我錯過了?春季雲環境中有更簡單的方法嗎?我真的很喜歡在需要時讓流服務器啓動新的JVM的想法,但所有這些額外的過程真的覺得是錯誤的方法。

如果這應該在CloudFoundry上運行,例如那麼這意味着我有一個cron調度器用於單個作業,成本爲35美元/月(因爲從Java BuildPack 4.0開始,只有512MB的JVM進程將不再啓動[2]) - 這是一個昂貴的cron定義...

[1] https://github.com/spring-cloud/spring-cloud-stream-app-starters/tree/master/triggertask/spring-cloud-starter-stream-source-triggertask [2] https://www.cloudfoundry.org/just-released-java-buildpack-4-0/

回答

3

TL; DR;不要這樣做,要麼編寫自己的調度邏輯,要麼將Spring雲數據流的REST API與企業調度程序集成。

加長版
讓我給這個有點歷史的,然後提供該怎麼做我的思想。

當Spring Cloud Task項目啓動時,我們想創建一些示例應用程序來說明許多不同用例的任務使用情況。根據收到的消息,輕鬆啓動任務的能力是我們確定要創建樣本的一個用例。您可以看到樣本herehere

當Spring雲數據流(SCDF)出現時,我們希望能夠在的某些方式中解決的其中一個用例是調度任務。問題是我們希望SCDF服務器是無狀態的(因爲它本身就是雲本地微服務)。這意味着嵌入調度程序不是一個選項。從那裏我們感覺到,與每個平臺爲調度提供的內容相結合是最有意義的。但是它也需要最多的工作。這種方法實際上是在我們的路線圖上,但我們還沒有讓用戶反饋將該功能推到列表上。

我們在短期內解決這個問題的解決方案就是您今天在文檔中找到的解決方案。將這些示例應用程序與trigger-task應用程序一起使用,該應用程序可處理拼圖的cron部分,以在給定時間啓動任務。

我個人的建議是,如果你沒有一個你已經使用過的調度器,寫一個啓動應用程序,使用Quartz或其他內部調度程序(Spring Scheduler等)調用SCDF API來啓動任務給定的時間表。鑑於可用的DataFlowTemplate,編寫自己的調度程序應該很簡單。

+0

非常感謝這些細節!所以,如果我理解正確,將來會有一個本地調度程序集成,在我們的情況下,從CF中反正呢?我可以遵循什麼問題嗎? – domi

+1

嗨,@Domi。具體來說,CF中有一個CF-Scheduler MVP,可以通過SCDF的REST-API調度和啓動任務。這個想法是在SCDF中定義DSL,並使用CF-Scheduler中的REST-API將其安排在期望的日期/時間或cron中。 CF計劃程序團隊大致針對8月份的GA版本。 我們還計劃與SCDF直接交互CF調度程序(通過它的API和服務綁定)。我們的儀表板將能夠爲每個任務提供日期/時間和cron表達式。 –

相關問題