【问题标题】:Full featured Cron scheduling of akka streamsakka 流的全功能 Cron 调度
【发布时间】:2019-07-27 07:24:31
【问题描述】:

在 akka 流中,可以执行以下操作:

Source.tick(0.seconds, 15.seconds, "Hello")

您的流将每 15 秒收到一次滴答元素“Hello”。我正在寻找的是做同样的事情的可能性,但是在类似 cron 的时间表上,例如“每周一下午 5 点”。

【问题讨论】:

  • @JeffreyChung 谢谢!但它有所不同,因为我需要丰富的 crons 调度可能性。这家伙只是询问一些“每 n 小时”的循环时间表。

标签: akka akka-stream


【解决方案1】:

我想通了。有一个 akka 插件 akka-quartz-scheduler 允许像这样配置一些石英计划配置:将此部分添加到 akka.conf 中

akka {
  quartz.schedules {
    SomeSchedule {
      expression = "0 0 1 * * ?"
      timezone = "GMT-7"
      description = "Do something every day at 1 a.m. SF time."
    }
  }
}

然后安排它

    case class Signal(someData: String)

    implicit val system: ActorSystem = ActorSystem("lebulbeaux-system")
    implicit val materializer: ActorMaterializer = ActorMaterializer()
    // needed for the future flatMap/onComplete in the end
    implicit val executionContext: ExecutionContextExecutor = system.dispatcher

    val source: Source[Signal, ActorRef] = Source.actorRef[Signal](100, OverflowStrategy.fail)

    val ref: ActorRef = Flow[Signal].to(Sink.foreach(signal => println(signal.someData))).runWith(source)

    import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension

    QuartzSchedulerExtension(system).schedule("SomeSchedule", ref, Signal("Hello!"))

    // scroll

现在您将在每天凌晨 1 点(旧金山时间)收到一条信号消息。

另外,请查看issue 了解更多使用 Source.actorRef 的选项

【讨论】:

    猜你喜欢
    • 2019-02-19
    • 2016-11-23
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2019-10-27
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多