【问题标题】:Akka-quartz scheduler never triggers my actorAkka-quartz 调度器从不触发我的演员
【发布时间】:2013-11-01 13:03:49
【问题描述】:

我正在尝试使用 akka-quartz-scheduler 定期触发清理事件。我让调度程序将消息发送给参与者,但前提是没有与调度关联的日历。每当我将日历附加到日程表时,演员都不会收到任何消息。

这是与 akka-quartz-scheduler 相关的 application.conf 部分。如果我删除该行

日历 = ["Minimal"]"

从配置中,我的演员被触发。如果我把线路留在里面,没有演员会被叫到。

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

    }
  }
}

actor 实现如下所示:

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

【问题讨论】:

  • 您找到解决方案了吗?我也有同样的问题。

标签: quartz-scheduler akka


【解决方案1】:

问题发生在日历初始化期间。 检查 QuartzSchedulerExtension 类中的第 245 行: scheduler.addCalendar(name.toUpperCase, calendar, true, true)

日历是使用大写字母添加的,因此 Quartz 永远不会找到它,因此不会触发任何作业。 如果您在 akka 配置中使用大写名称定义日历,它应该可以工作。

【讨论】:

  • 从来不理解大写的必要性,但就是这样。很抱歉长时间延迟接受答案:)
猜你喜欢
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多