Асинхронный обратный вызов от Akka Actor - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть субъект, который может получать сообщения от внешней системы (UDP / TCP). Основываясь на содержании входящих данных, бывают случаи, когда я хочу, чтобы актер перезвонил не кодовой части моего кода.
Другими словами, я не хочу звонить и действовать с ask и ждать некоторых входящих данных, а скорее вызываться асинхронно.
Как я могу реализовать это без, например, закрытие по вызывающему объекту (тривиальный будет передан в обратном вызове при создании ActorRef, но это будет захватывать вызывающую сторону)?

1 Ответ

0 голосов
/ 30 апреля 2018

Предполагая, что у вас есть функциональный интерфейс handleMessage - то есть метод handleMessage, который принимает только неизменяемые данные - вы можете просто обернуть его в Future, запустить в контексте актера:

import scala.concurrent.Future

// Inside your actor, this is the implicit execution context holding the thread
// pool the actor executes within. You MUST import this in order for it to be in
// the implicit scope for scala.concurrent.Future.
import context.dispatcher
Future {
  handleMessage(messageData)
  // If you need to know when this completes, send a message to the initiating
  // actor here.
}
...