ActorSystem
中的一个变量mailboxes
,定义如下:
val mailboxes: Mailboxes = new Mailboxes(settings, eventStream, dynamicAccess, deadLetters)
MailBoxes
的具体定义如下:
private[akka] class Mailboxes(
val settings: ActorSystem.Settings,
val eventStream: EventStream,
dynamicAccess: DynamicAccess,
deadLetters: ActorRef)
其中各个参数的说明如下:
settings
——> 就是ActorSystem
中的settings
,也就是akka
世界的所有外部配置参数
eventStream
——> 可以简单理解,就是一个集中管理日志打印的地方
dynamicAccess
——> 通过反射机制来生成一个指定类的实例的地方
deadLetters
——> 死信发送的地方
Mailboxes
有一个变量mailboxBindings
用来存储配置文件中配置的mailbox
的类名与其对应的配置参数名的对应关系,在默认配置文件中的配置如下:
requirements {
"akka.dispatch.UnboundedMessageQueueSemantics" =
akka.actor.mailbox.unbounded-queue-based
"akka.dispatch.BoundedMessageQueueSemantics" =
akka.actor.mailbox.bounded-queue-based
"akka.dispatch.DequeBasedMessageQueueSemantics" =
akka.actor.mailbox.unbounded-deque-based
"akka.dispatch.UnboundedDequeBasedMessageQueueSemantics" =
akka.actor.mailbox.unbounded-deque-based
"akka.dispatch.BoundedDequeBasedMessageQueueSemantics" =
akka.actor.mailbox.bounded-deque-based
"akka.dispatch.MultipleConsumerSemantics" =
akka.actor.mailbox.unbounded-queue-based
}
经过Mailboxes中的这段解析代码解析:
private val mailboxBindings: Map[Class[_ <: Any], String] = {
import scala.collection.JavaConverters._
settings.config.getConfig("akka.actor.mailbox.requirements").root.unwrapped.asScala
.toMap.foldLeft(Map.empty[Class[_ <: Any], String]) {
case (m, (k, v)) ⇒
dynamicAccess.getClassFor[Any](k)