8

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");
  }
}
4

1 に答える 1

3

この問題は、カレンダーの初期化中に発生します。QuartzSchedulerExtension クラスの 245 行目を確認してください: scheduler.addCalendar(name.toUpperCase, calendar, true, true)

カレンダーは UpperCase を使用して追加されるため、Quartz はそれを見つけることができず、ジョブがトリガーされません。大文字の名前を使用して akka config でカレンダーを定義すると、機能するはずです。

于 2015-06-23T17:04:09.700 に答える