0

それは単なる解決策の問題です。Play Framework で一定の​​時間間隔で繰り返すアクターの作成に成功しましたが、たとえば「12 時間」など、日付の決まった時間に活動できるアクターを作成したいと考えています。

私の最初の解決策は、イン プロセッサを追加し、Calendar objectアクターがアクティブになるたびに時間をチェックすることです。時間がセットアップ時間と等しい場合は、コードを実行してください。それは可能な解決策だと思いますが、良い解決策ではありません。Calendar オブジェクトが何度も作成されており、作成回数をCalendar objectできる限り減らしたいと考えています。

Origin Document: https://www.playframework.com/documentation/2.5.x/JavaAkkaおよび SOF のその他のトピックで他のソリューションを見つけましたが、私には合いません。

誰でも私がそれを解決するのを手伝ってくれますか?

4

1 に答える 1

1

アクターシステムを使用して、スケジュールを設定するクラスを作成します。

public class SchedulingTask {

    @Inject
    public SchedulingTask(final ActorSystem system,
                          @Named("foo-actor") ActorRef fooActor) {
        system.scheduler().schedule(
            Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay
            Duration.create(12, TimeUnit.HOURS),     //Frequency
            fooActor,
            "doSomething",
            system.dispatcher(),
            null);
    }
}

systemが注入され、アクターへの参照を注入することもできます。または、 からアクター リファレンスを検索することもできますsystem

これを自分のやりたいように適応させたらSchedulingTask、モジュールで宣言します。これは熱心なシングルトンであることに注意してください。これにより、起動時に確実に実行されます。

package com.example;
import com.google.inject.AbstractModule;
import play.libs.akka.AkkaGuiceSupport;

public class MyModule extends AbstractModule implements AkkaGuiceSupport {
    @Override
    protected void configure() {
        bindActor(FooActor.class, "foo-actor");
        bind(SchedulingTask.class).asEagerSingleton();
    }
}

最後に、アプリケーション conf を更新してモジュールを有効にします。

play.modules.enabled += "com.example.MyModule"
于 2017-01-03T07:37:38.393 に答える