akka-quartz-scheduler を使用して、定期的にクリーンアップ イベントをトリガーしようとしています。スケジューラにアクターにメッセージを送信させますが、スケジュールに関連付けられたカレンダーがない場合のみです。カレンダーをスケジュールに添付すると、アクターはメッセージを受け取りません。
これは、akka-quartz-scheduler に関連する application.conf セクションです。行を削除すると
カレンダー = ["最小限"]"
構成から、私のアクターがトリガーされます。私が台詞を残したら、俳優は呼ばれません。
akka {
quartz {
defaultTimezone = "Europe/Oslo"
schedules {
NowAndThen {
description ="Delete temp files now and then, eg every hour"
expression = "*/10 * * * * ?"
calendars = ["Minimal"]
}
}
calendars {
Minimal {
type = Daily
exclude {
startTime = "15:00"
endTime = "15:01"
}
}
}
}
}
Global.java で、playframework アプリケーションから拡張機能を初期化しています。
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Extension;
import akka.actor.Props;
import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension;
import play.Application;
import play.GlobalSettings;
import play.Logger;
import play.libs.Akka;
import uttrekk.CleanupRunner;
public class Global extends GlobalSettings {
public void onStart(Application app) {
AkkaStartUp.startup(app);
}
static class AkkaStartUp {
public static void startup(Application app) {
// Starter autoamtiske avelveringer norges eiendommer
ActorSystem system = Akka.system();
ActorRef cleanupRef =system.actorOf(new Props(CleanupRunner.class));
QuartzSchedulerExtension scheduler = (QuartzSchedulerExtension) QuartzSchedulerExtension.get(system);
scheduler.schedule("NowAndThen",cleanupRef,"Clean");
}
}
}
アクターの実装は次のようになります。
package uttrekk;
import akka.actor.UntypedActor;
import play.Logger;
import util.NewProperties;
import java.io.File;
import java.io.FilenameFilter;
public class CleanupRunner extends UntypedActor {
@Override
public void onReceive(Object message) throws Exception {
Logger.info("Running cleanup of temporary files");
}
}