2016-12-28 2 views
0

это только вопрос в решении. Я добился успеха в создании актера, повторяющегося фиксированным интервалом времени в Play Framework. Но я хочу сделать актера, который может быть активным в определенное время на дату. Например: «12 часов».Как создать «Аккаунт Акка» в игровой системе 2.5.x?

Мое первое решение - добавить Calendar object в процессор и проверить время, когда актер активен. Если время равное моему времени установки, просто запустите мой код. Я думаю, что это возможное решение, но не хорошее решение. Объект календаря был создан много раз, и я хочу уменьшить число Calendar object, создавая минимальное значение при возможном.

Я нашел другие решения в оригинале Документ: https://www.playframework.com/documentation/2.5.x/JavaAkka и другие темы в S.O.F, но не подходят мне.

Любой может помочь мне решить его, пожалуйста?

ответ

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(); 
    } 
} 

Наконец, обновите приложение, чтобы включить модуль.

play.modules.enabled += "com.example.MyModule" 
+0

Извините, Стив, я думаю, вы неправильно поняли мою проблему. Я сделал с интервалом актера. Теперь я хочу, чтобы актер мог проснуться в фиксированные часы дня (например, будильник). Немногие, неважно, я заменил его на общую нить. – Wing

Смежные вопросы