Полнофункциональное планирование Cron потоков akka - PullRequest
1 голос
/ 05 марта 2019

В потоках akka можно сделать следующее:

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

И ваш поток будет получать отметку «Hello» каждые 15 секунд. Что я ищу, так это возможность делать то же самое, но по расписанию, например, cron. "каждый понедельник в 5 часов вечера".

1 Ответ

2 голосов
/ 05 марта 2019

Я понял это. Существует плагин 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 час по SF времени.

Кроме того, посмотрите на эту проблему , чтобы узнать больше о возможностях использования Source.actorRef

...