Because using Camel to schedule Akka actors is silly
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


The Akka scheduler is limited, and using Apache Camel to run timers is silly.

Build Status


  • Quartz scheduler
  • Akka
  • Actors
  • Fin


Works with Akka 2.1.x+ on Scala 2.10.x / 2.11.x


Include the following repository to you Ivy/Maven/SBT file:

"" at ""

Include the following dependency in your build.sbt:

"us.theatr" %% "akka-quartz" % "0.3.0"

(along with any needed Akka dependencies - not included by default)

Create a QuartzActor:

import us.theatr.akka.quartz._
val quartzActor = system.actorOf(Props[QuartzActor])

Send it add messages:

quartzActor ! AddCronSchedule(destinationActorRef, "0/5 * * * * ?", Message())

Now Message() will be delivered to destinationActorRef every 5 seconds.

The Spigot can turn the cron job on or off. All you need to do is to implement

trait Spigot {
  def open: Boolean

And add it to the AddCronSchedule:

val leaderSpigot = new Spigot {
  def open = zookeeperClient.isLeader()
quartzActor ! AddCronSchedule(destinationActorRef, "0/5 * * * * ?", Message(), false, leaderSpigot)

Now Message() will be delivered to destinationActorRef every 5 seconds only if zookeeperClient.isLeader() returns true. This is useful if your service runs in a cluster and you want a single (or some) of the instances in the clusters to run the cron job.

For more information, please see the unit test or consult the JavaDoc/ScalaDoc.

For more documentation about quartz scheduler see


Quartz really isn't that fantastic - a ton of cruft, non-sensical bugs, and "enterprise" anti-patterns. But at least it can parse cron expressions, and I have better things to do than re-implement that.