2013-10-26 41 views
11

作爲一名Java開發人員,我習慣使用Spring Batch進行批處理,通常使用流式庫來導出帶有StAX的大型XML文件。批處理和函數式編程

我現在正在開發一個Scala應用程序,並想知道是否有框架,工具或指南來實現批處理。

我的Scala應用程序使用Cake模式,我不知道如何將它與SpringBatch集成。此外,我想遵循Functional programming in Scala中描述的準則,並嘗試保持功能的純度,使用類似IO monad的東西...

我知道這是一個開放的問題,但我從來沒有讀過任何關於這個...

有沒有人已經在這裏實現了功能批處理?它是如何工作的?我應該有一個主創建一個IO單元批處理操作並運行它?是否有任何工具或指導來幫助,監控或處理可重啓性,就像我們在Java中使用Spring Batch一樣。 你在Scala中使用Spring Batch嗎? 您如何處理集成部分,例如等待JMS/AMQP消息開始生成XML的處理?

在subjet歡迎任何的反饋

+2

有什麼地方可以解釋Spring Batch在做什麼?我很難理解這個網站。 –

+2

我不認爲「純度」是一個理想的目標(除化學之外的其他任何東西)。使用公共不可變的類型具有很大的實用價值。從您的代碼中刪除所有可變數據不是。 –

+0

@RandallSchulz我清楚地說到,實際上並不知道這個目標是什麼,但我很高興廣泛地爭辯說,如果可能,純度可以成爲一個非常有用的財產。這顯然不適合所有的計算,但是我發現從「純度作爲默認」推斷是非常有用的,並且只有在它們是合理的時候才添加雜質。這不是一個可以辯論的地方,但我確實想爲你的意見提供一個平衡。 –

回答

4

你不提什麼樣的應用程序,你正在使用Scala開發,所以我在這裏要胡亂猜測和假設你正在做一個服務器端的一個。進一步猜測,我們假設你正在使用Akka ......因爲你正在使用它,不是嗎? :)

在這種情況下,我猜你正在尋找的是Akka Quartz Scheduler,官方的Quartz Extension和Akron的cron風格調度工具。我自己並沒有嘗試過,但從你的要求看來,Akka +這個模塊將會非常合適。考慮到Akka已經提供了掛鉤來處理失敗角色的可重新啓動性,我不認爲利用生成器中內置的生命週期回調來添加對批處理進程的監視是很困難的。

關於與JMS/AMQP消息傳遞的交互,您可以使用Akka Camel module,它支持通過許多協議(包括JMS)發送和接收消息。使用這個模塊,您可以讓消費者從一些JMS端點接收消息,並從那裏啓動您想要的任何進程,可能轉發或向負責該進程的參與者發送新消息。如果該過程由cron樣式計時器或傳入消息觸發,則可以重複使用同一個參與者來完成該任務。