【问题标题】:Quartz CronTriggers in Akka Actors using or not using Camel?Akka Actors 中的 Quartz CronTriggers 使用或不使用 Camel?
【发布时间】:2013-08-08 01:33:53
【问题描述】:

我有一个 Quartz CronTriggers 数据库。我想将整个系统移植到我目前正在构建的基于 Akka 的后端。我正在研究并思考如何做到这一点。

例如,CustomRouteBuilders 和其他类似的东西。我尝试了 Giovani 的优秀 Quartz-Camel-Akka 集成示例,并且对它印象深刻。现在,我的系统中有多个 cron 触发器,它们具有不同的用户创建的 cron 表达式。

如何使用此类依赖于用户的 endpointUri 对 Camel Consumer Actors 系统进行编程?想了很多办法,但还没有弄清楚。

请帮助我完成这项工作。我也对 Quartz 和 Camel 之外的其他想法持开放态度。我想坚持使用基于 Akka 的后端平台。我的系统由用户定义的作业组成,这些作业在用户定义的 cron 可形成时间触发。

【问题讨论】:

    标签: scala cron quartz-scheduler apache-camel akka


    【解决方案1】:

    从一个 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
        }
      }
    }
    

    【讨论】:

    • 太棒了。谢谢马丁。会试试这个。
    • 我实际上正在考虑类似的事情......但不确定如何做到这一点。您的代码使它更加清晰和容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多