2013-11-01 16 views
7

我正在尝试使用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" 
       } 
      } 

     } 
    } 
} 

我正在初始化从playframework应用程序扩展,在Global.java:

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

您是否找到了解决方案?我也有同样的问题。 – Frane

回答

2

在日历初始化期间发生该问题。 入住QuartzSchedulerExtension班线245: scheduler.addCalendar(name.toUpperCase,日历,真,真)

日历使用大写字母加,所以石英从来没有发现它,产生没有作业触发即可。 如果您使用UpperCase名称在akka配置中定义日历,它应该可以工作。

+0

永远不要理解大写的需要,但那是它的方式。对不起,接受答案的长时间延迟:) –