Akkaのドキュメントによれば、メールボックスはメッセージのためにスキャンされません。各メッセージは到着順に別のメッセージ(デフォルトではFIFO)後に処理されます。しかし、アクターから受信者に一致しないメッセージをアクターから別のアクターに送信すると、デッドレターアクター(これは想定されるログに表示される)に移動されたり、メールボックス内の次のメッセージの処理がブロックされたりしません1秒後に到着し、正しく処理することができます。Akkaと比類のないメッセージはどうなりますか?
メールボックスからの不一致のメッセージはどうなりますか?
私はsbtでScala 2.10.4とAkka 2.4-SNAPSHOTを使用しています。
package main.scala
import akka.actor._
class SRActor(dest: ActorRef) extends Actor with ActorLogging {
dest ! A
dest ! B
context.stop(self)
override def receive = {
case _ => {
log.info("Finally got something")
}
}
}
class SRActorReceiver extends Actor with ActorLogging {
override def receive = {
case B =>
log.info("Finally got B")
}
}
俳優の作成:
package main.scala
import akka.actor._
case object A
case object B
object ErrorApp extends App {
// SR: Send nowhere received
var system6 = ActorSystem("ErrorActorSystem")
val srActorReceiver = system6.actorOf(Props(classOf[SRActorReceiver]), "sractorreceiver")
val sractor = system6.actorOf(Props(classOf[SRActor], srActorReceiver), "sractor")
// wait until actors have finished
Thread.sleep(1000)
system6.shutdown