在应用程序启动时,我想安排一个任务每2分钟运行一次(例如,可能每1分钟一次)。
我试过两种方式:
1.使用带有Runnable的Akka调度方法
abstract def schedule(initialDelay:Duration,frequency:Duration,runnable:Runnable):可取消
(类似于how to integrate SMS & EMAIL Reminders in my play2.0 framework web application.,
除了我希望它重复,所以我使用schedule而不是scheduleOnce)
2.使用Akka调度方法与Actor
abstract def schedule(initialDelay:Duration,frequency:Duration,receiver:ActorRef,message:Any):可取消
(类似于Java Play2- Akka for jobs)
这是Akka调度程序API: http://doc.akka.io/api/akka/2.0.3/#akka.actor.Scheduler
在这两种情况下,我都要覆盖Global的onStart方法。 My Global位于根包中:/path/TestApp/app/Global.java
在这两种情况下,当我在生产模式下运行应用程序时(在开发模式下它根本不起作用...堆栈上有关于此的问题)它运行该功能或者它只发送一次消息。
如何让它以特定频率重复运行?
如果您已经完成此操作或对如何操作有任何想法......请回复。
后期编辑1:
首先,非常感谢nico_ekito
这是有效的版本:
类MyUntypedActor.java
import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class MyUntypedActor extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
public void onReceive(Object message) throws Exception {
if (message instanceof String) {
log.info("Received String message: {}", message);
}
else {
unhandled(message);
}
}
}
Class Global.java
import java.util.concurrent.TimeUnit;
import play.Application;
import play.GlobalSettings;
import play.libs.Akka;
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.util.Duration;
public class Global extends GlobalSettings {
@Override
public void onStart(Application app) {
ActorRef instance = Akka.system().actorOf(new Props(MyUntypedActor.class));
Akka.system().scheduler().schedule(
Duration.Zero(),
Duration.create(10, TimeUnit.SECONDS),
instance, "VALIDATE"
);
}
}
br />
此版本适用于akka演员。
但我也需要与Akka Scheduler进行WS调用,如下所示:
https://groups.google.com/forum/?fromgroups=#!searchin/play-framework/Akka $ 20Scheduler /播放框架/ -WAr7xk3H-O / oLg9ZrwwFDgJ
但是在Java版本中。
那么......如何在不使用演员的情况下安排以特定频率运行的功能? 对于我的其他情况,演员工作,但对于WS调用,它似乎应该更简单......
后期编辑2:
我发现案例1(使用带有Runnable的Akka调度方法)没有用,因为在同一个onStart方法中我定义了一个actor ......似乎Runnable并不“喜欢”actor实例......登记/>
案例2,实质上就像nico_ekito的案例仍然不起作用...所以我会避免使用语法
new Props()。withCreator(new UntypedActorFactory()
因为它显然有问题。