我正在创建一个actor,它应该用自己的消息包装所有传入的消息并进一步转发它们。 不幸的是,我没有任何用户消息的公共基类,所以我将用Object.class
来捕获它们现在我不确定Akka是否可以向我的演员发送自己的消息。我不想偶尔转发一些发给我的包装器演员的系统消息。
答案 0 :(得分:1)
Akka会在内部向您的演员发送消息。这些消息扩展了内部SystemMessage
特征。正如源代码中的描述所述,系统消息在每个actor的邮箱中形成自己的队列,并与其他消息分开处理。我们可以在Mailbox
和ActorCell
中跟踪这些邮件的处理情况。
当转发角色收到SystemMessage
时,该邮件不包装并转发。 Akka在内部处理这些消息,因此转发actor的行为不会破坏这种系统级活动。
答案 1 :(得分:0)
class WrapAndForwardActor extends Actor {
override def receive: Receive = {
case _ => {
// blocking
// do whatever you want to do with the incoming message
sender forward "WrappedMessage"
}
case "AnotherExample" => {
// non blocking
val sendTo = sender()
// do whatever you want to do with the message
// non blocking futures
//when future is complete
sendTo forward "WrappedMessage"
}
}
}