Когда супервизор игрок вызван, например:
TemplateActors.templateSupervisor ! new TemplateMessage("***POST***", 1)
Следующий код выполняется (принадлежит к тому же классу):
import akka.actor.{ Actor, Props, ActorLogging }
/**
* Actor TemplateSupervisor
*/
class TemplateSupervisor extends Actor with ActorLogging {
import scala.concurrent.duration._
import akka.actor.SupervisorStrategy._
import akka.actor.OneForOneStrategy
Создание нового Актеры
val templateActor = context.actorOf(Props[ TemplateActor ], "TemplateActor"))
val templateActor2 = context.actorOf(Props[ TemplateActorJuan ], "juan_carlos_actor")
путь запроса от Actor templateActor
//log.info("path templateActor2: " + templateActor2.path)
//log.info("path templateActor: " + templateActor.path
Мы послали сообщение Актер:
// sent message
def receive = {
// Forward message to templateActor
case message: TemplateMessage => templateActor forward message
}
override val supervisorStrategy = OneForOneStrategy() {
case exception: Exception =>
exception.printStackTrace()
log.error(exception, exception.getMessage())
Restart
}
}
/**
* TemplateActor
*/
class TemplateActor extends Actor with ActorLogging {
import akka.pattern._
import scala.concurrent.{Future, ExecutionContext}
implicit val _: ExecutionContext = context.dispatcher
val actor = context.actorSelection("//ms-service-executor/user/TemplateSupervisor/juan_carlos_actor")
def receive = {
case message: TemplateMessage =>
log.info("************Realizando PING from TemplateActor")
actor ! new PING("PING")
case message: PONG =>
log.info("************PONG make in TemplateActor")
}
}
/**
* TemplateActorJuan
*/
class TemplateActorJuan extends Actor with ActorLogging {
import akka.pattern._
import scala.concurrent.{Future, ExecutionContext}
implicit val _: ExecutionContext = context.dispatcher
val actor = context.actorSelection("//ms-service-executor/user/TemplateSupervisor/TemplateActor")
def receive = {
case message: PING =>
log.info("************make PONG from TemplateActorJuan")
actor ! new PONG("PONG")
}
}
case class PING(val id: String)
case class PONG(val id: String)
TemplateActors Класс
import akka.actor.{ Props, ActorSystem }
import TemplateSupervisor
/**
* Method override for the unique ActorSystem instance
*/
trait Core {
implicit def system: ActorSystem
}
/**
* Definition of the ActorSystem and the ExecutionContext
*/
trait BootedCore extends Core {
import scala.concurrent.ExecutionContext
implicit lazy val system = ActorSystem("ms-service-executor")
implicit lazy val ex: ExecutionContext = system.dispatcher
sys.addShutdownHook(system.shutdown())
}
/**
* Template project actors instantiation
*/
trait CoreActors { this: Core =>
/*
* Creacion del actor "TemplateSupervisor"
* Props: configuracion del actor
* system: unico actor existente
*/
val templateSupervisor = system.actorOf(Props[ TemplateSupervisor ], "TemplateSupervisor")
}
/**
* Template actor references
*/
object TemplateActors extends BootedCore with CoreActors
Это зависит от того, что другой актер должен делать с запрос? Есть ли у другого актера также маршруты? Или это просто дает результат для этого точного запроса? – jrudolph
Это должно привести к результату, но мне все еще нужен объект Request. Таким образом, будет нормально иметь весь запрос или иметь возможность отправлять класс, содержащий его, а также другие данные. – gotch4
Просто чтобы показать, что это можно сделать, ознакомьтесь с этим парнем код: https://github.com/mhamrah/spray-sample/blob/master/src/main/scala/basic/BasicSample.scala – byrnedo