アプリケーションの起動時に、タスクを 2 分ごと (たとえば、1 分ごと) に実行するようにスケジュールしたいと考えています。
私は2つの方法で試しました:
1. Runnable抽象def schedule(initialDelay:Duration、frequency:Duration、runnable:Runnable)でAkkaスケジュールメソッドを使用する:キャンセル可能(私のplay2.0フレームワークにSMSとEMAILリマインダーを統合
する方法と同様)
2. Akka スケジュール メソッドを Actor 抽象定義スケジュール (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 回だけ送信します。
特定の頻度で繰り返し実行するにはどうすればよいですか?
すでにこれを行っている場合、またはその方法について何か考えがある場合は...返信してください。
LATER EDIT 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);
}
}
}
クラス 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 スケジューラで WS 呼び出しを行う必要もあり
ます。 -WAr7xk3H-o/oLg9ZrwwFDgJ
ただし、Java バージョンです。
では、アクターを使用せずに関数を特定の頻度で実行するようにスケジュールするにはどうすればよいでしょうか? 私の他のケースでは、アクターは機能しますが、WS 呼び出しの場合はもっと単純なはずです...
LATER EDIT 2:
同じ onStart メソッドでアクターを定義したため、ケース 1 (Runnable で Akka スケジュール メソッドを使用) が機能しないことがわかりました... Runnable はアクター インスタンスを「好き」ではないようです...本質的にnico_ekitoのケースのようなケース2はまだ機能しません...したがって
、明らかに問題があるため
、 new Props().withCreator(new UntypedActorFactory() を使用した構文は避けます。