2011-07-20 4 views
7

私は石英のCronTriggersのDbを持っています。私はこのシステム全体を、現在設計中のAkkaベースのバックエンドに移植したいと思っています。私はこれを見る方法を考えていました。アクテルのクォーツCronTriiggersキャメルを使用して、または使用していない俳優?

たとえば、CustomRouteBuildersなどのようなものです。私はGiovaniの優れたQuartz-Camel-Akka統合の例を試してみましたが、かなり感銘を受けました。さて、私は、システム内に複数のcronトリガを用意しています。

このようなユーザー依存のendpointUriを使用してCamel Consumer Actorsのシステムをプログラミングするにはどうすればよいですか?多くの選択肢を考えていたが、まだ何かを理解することができなかった。

私はこの努力のお手伝いをしてください。私はQuartzとCamel以外のアイディアにもオープンしています。私はAkkaベースのバックエンドプラットフォームに固執したい。私のシステムは、ユーザー定義のcron形式のタイミングで起動するユーザー定義のジョブで構成されています。

答えて

9

cron式のリスト(データベースからの読み取りなど)から始めて、リストを繰り返して、各要素の石英コンシューマーアクターを開始できます。ここに例があります:

import akka.actor.Actor 
import akka.actor.Actor._ 
import akka.camel.CamelServiceManager._ 
import akka.camel.Consumer 

object CronExample { 

    def main(args: Array[String]) { 
    val cronExpressions: List[String] = ... // cron expressions read from database 

    startCamelService 

    cronExpressions foreach { cronExpression => 
     val timerName: String = ... // app-specific timer name for cronExpression 
     actorOf(new Scheduler(timerName, cronExpression)).start 
    } 
    } 

    class Scheduler(timerName: String, cronExpression: String) extends Actor with Consumer { 
    def endpointUri = "quartz://%s?cron=%s" format (timerName, cronExpression) 

    protected def receive = { 
     case msg => ... // react on timer event 
    } 
    } 
} 
+1

素晴らしいです。 Martinに感謝します。これを試してみる。 –

+0

私は実際に似たようなことを考えていましたが、それを行う方法は不明でした。あなたのコードはそれをはるかに明確かつ容易にします。 –

関連する問題