Programing/Akka

Akka Scheduler

BUST 2018. 8. 21. 22:43

Akka Scheduler

  • Akka Scheduler, 일정 시간 이후 작업을 작동시킨다.
  • Scheduler의 정확도를 높히기 위해서는 application.conf 설정파일의 `akka.scheduler.tick-duration`를 수정해야된다.
  • 긴 시간 (long term) Scheduler로서는 부적절하기 때문에 akka-quartz-scheduler 사용하는 것이 좋다.
  • 주기적인 메시지나 싱글 메시지를 위한거면 scheduler 사용하는 것 대신 Actor Timer의 사용을 추천한다.

Send to Actor

system.scheduler().scheduleOnce(Duration.ofMillis(50),
  testActor, "foo", system.dispatcher(), null);

Runnable

system.scheduler().scheduleOnce(Duration.ofMillis(50),
  new Runnable() {
    @Override
    public void run() {
      testActor.tell(System.currentTimeMillis(), ActorRef.noSender());
    }
}, system.dispatcher());

Tick

class Ticker extends AbstractActor {
  @Override
  public Receive createReceive() {
    return receiveBuilder()
      .matchEquals("Tick", m -> {
        // Do someting
      })
      .build();
  }
}

ActorRef tickActor = system.actorOf(Props.create(Ticker.class, this));

//This will schedule to send the Tick-message
//to the tickActor after 0ms repeating every 50ms
Cancellable cancellable = system.scheduler().schedule(Duration.ZERO,
 Duration.ofMillis(50), tickActor, "Tick",
system.dispatcher(), null);

//This cancels further Ticks to be sent
cancellable.cancel();
  • cancellable 객체를 통해 주기적인 스케쥴러(tick) 정지할수있다.


Reference


'Programing > Akka' 카테고리의 다른 글

Akka Cluster Seed Node  (0) 2018.08.25
Akka Management  (0) 2018.08.21
Akka Stream Asynchronous operators  (0) 2018.08.17
Cluster Aware Router  (0) 2018.08.16
Akka Actor / Stream / Cluster 을 이용한 확장 가능한 Task 단위의 시스템  (0) 2018.08.15