В чем разница между timers.startSingleTimer и scheduler.scheduleOnce в Akka Actor? - PullRequest
0 голосов
/ 30 января 2019

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

Я заметил, что есть как минимум два способа сделать это.

Я хотел бы понять разницу свыберите правильный.

Первый - это один из методов akka.actor.Timers:

def startSingleTimer(key: Any, msg: Any, timeout: FiniteDuration): Unit

Второй - довольно распространенный способ работы с планировщикомсистемы контекста субъекта:

final def scheduleOnce(
    delay:    FiniteDuration,
    receiver: ActorRef,
    message:  Any)(implicit executor: ExecutionContext,
                            sender: ActorRef = Actor.noSender): Cancellable

Вопрос:

  • В чем основное различие между ними в случае планирования сообщения для себя?
  • Является ли хорошей идеей передать контекст актера в метод scheduleOnce?

1 Ответ

0 голосов
/ 30 января 2019

akka.actor.Timers.startSingleTimer

  • Может использоваться только внутри актера
  • Разрешает только планирование сообщения дляself, то есть невозможно запланировать сообщение некоторым другим акторам
  • Если актер умирает, активные таймеры отменяются автоматически
  • Отслеживает активные таймеры пользователем, предоставленным key

context.system.scheduler.scheduleOnce

  • Может использоваться для планирования сообщений снаружи и внутри участников
  • Требуется явное ActorRef для receiver и опционально sender
  • Автоматический процесс очистки отсутствует.Все должно быть обработано явным образом с помощью вызова return akka.actor.Cancellable

Итак, если вам просто нужно запланировать сообщения для себя, выберите akka.actor.Timers

Это хорошая идеяпередать контекст актера в метод scheduleOnce?

Не уверен, каким образом вы хотите это сделать, но в целом контекст актера должен использоваться только в методе receive и не передаваться вне актера.используется в методах обратного вызова Futures.

...