Кварцевые CronTriggers в Akka Актеры используют или не используют Camel? - PullRequest
7 голосов
/ 20 июля 2011

У меня есть Db кварцевых CronTriggers. Я хочу перенести всю эту систему на бэкэнд на базе Akka, который я сейчас создаю. Я смотрел и думал о том, как это можно сделать.

Например, CustomRouteBuilders и другие подобные вещи. Я попробовал отличный пример интеграции Quartz-Camel-Akka от Giovani и был очень впечатлен этим. Теперь в моей системе несколько триггеров cron с разными и созданными пользователем выражениями cron.

Как я могу запрограммировать систему актеров Camel Consumer Actors с такими зависимыми от пользователя конечными точками Uri? Думал о многих вариантах, но пока ничего не мог понять.

Пожалуйста, помогите мне в этом начинании. Я также открыт для других идей помимо Кварца и Верблюда. Я хочу придерживаться основанной на Akka серверной платформы. Моя система состоит из заданий, определенных пользователем, которые запускаются по заданным пользователем временам, формируемым cron.

1 Ответ

10 голосов
/ 20 июля 2011

Начиная со списка выражений 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
    }
  }
}
...