Создание планировщика / таймера внутри актера, набранного akka - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь создать планировщик в моем akka, набранном только для его проверки, например, запускать каждые x секунд.

def start(): Behavior[ClientMsg] = Behaviors.setup { ctx =>
    ctx.log.info("start() called")

  ctx.system.scheduler.scheduleAtFixedRate(30.seconds, 5000.millis) { () =>
    ctx.self ! TestMessage(""""this is pretty cool"""")
  }  
}

Я получаю сообщение об ошибке, говорящее, что неявный контекст выполнения не scope.

Где мне взять контекст выполнения, когда он находится внутри типизированного субъекта? Кроме того, это, как я должен настроить планировщик / таймер?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Обратите внимание, что использование Behaviors.withTimers { timers => ... } должно быть предпочтительнее прямого использования системного планировщика, поскольку он обрабатывает удаление запланированных отправок, если актеры прекращают работу, и т. Д. c.

0 голосов
/ 14 апреля 2020

В нетипизированном Akka по умолчанию ExecutionContext - это объект dispatcher в system объекте:

implicit val executionContext: ExecutionContext = ctx.system.dispatcher

Я помещаю это в базовый класс, который я использую для всех актеров, наряду с со значениями по умолчанию для Timeout и ActorMaterializer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...