已經隨後的文檔的例子(2.1.4),我是有一個微內核加載演員處理消息,其中,所述可引導擴展類定義爲麻煩如下:實例化在微內核AKKA
class HelloKernel extends Bootable {
val system = ActorSystem("hellokernel")
def startup = {
system.actorOf(Props[HelloActor]) ! Start
}
def shutdown = {
system.shutdown()
}
}
如果虛設(即未在代碼中的其他任何地方使用)實例被創建,如下所示,然後按預期處理消息。
class HelloKernel extends Bootable {
val system = ActorSystem("hellokernel")
val dummyActor = system.actorOf(Props[HelloActor])
def startup = {
system.actorOf(Props[HelloActor]) ! Start
}
def shutdown = {
system.shutdown()
}
}
如果有確實是一個虛擬實例,或者通過這樣做,我會造成一些副作用,導致郵件被處理?
根據Thomas Letschert在Akka 2.1 minimal remote actor example中給出的代碼,我已將服務器端轉變爲Microkernel託管的演員。
import akka.actor.Actor
import akka.actor.ActorLogging
import akka.actor.ActorSystem
import akka.actor.Props
import akka.kernel.Bootable
class Joe extends Actor {
def receive = {
case msg: String => println("joe received " + msg + " from " + sender)
case _ => println("Received unknown msg ")
}
}
class GreetServerKernel extends Bootable {
val system = ActorSystem("GreetingSystem")
val joe = system.actorOf(Props[Joe], name = "joe")
println(joe.path)
joe ! "local msg!"
println("Server ready")
def startup = {
}
def shutdown = {
println("PrimeWorker: Shutting Down")
system.shutdown
}
}
在這種情況下,虛擬實例,當其刪除的消息不處理,是
val joe = system.actorOf(Props[Joe], name = "joe")
調用者的代碼是
import akka.actor._
import akka.actor.ActorDSL._
object GreetSender extends App {
implicit val system = ActorSystem("GreetingSystem")
val joe = system.actorFor("akka://[email protected]:2554/user/joe")
println(joe.path)
val a = actor(new Act {
whenStarting { joe ! "Hello Joe from remote" }
})
joe ! "Hello"
println("Client has sent Hello to joe")
}
我不喜歡認爲你應該需要虛擬實例。第一個例子有哪些類型的問題? – cmbaxter
雖然在第一個示例中存在成功的連接,但在雙方中的一個隨後停止時顯示錯誤消息,則不會處理任何消息。只要虛擬實例化完成,代碼或配置文件不再有任何更改,即可處理接收中的案例。 –
如果它與microkernal示例不同,您可以發佈您的'HelloActor'代碼嗎? – cmbaxter