2

アプリケーションの起動時に、タスクを 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() を使用した構文は避けます。

4

0 に答える 0