我需要一个actor,该actor会在接收时以及邮箱为空时隐藏低优先级消息,也对低优先级消息进行隐藏并发送它们。 我的邮箱是自定义的,这是我的演员:
class Dispatcher (fileRouter: ActorRef, metaRouter: ActorRef) extends Actor with Stash{
def receive = {
case requestQuery => metaRouter ! requestQuery
case TrackMeta if sender == metaRouter => fileRouter ! TrackMeta
case other => stash()
println("dispatcher buffered")
}
}
我不知道什么时候邮箱是空的,以及我应该在哪里(用什么方法)写unstashing和发送。 预先感谢。
答案 0 :(得分:1)
参与者不负责管理消息,它是该功能中的虚拟对象。向参与者发送消息的责任是调度员。您可以实现特征 UnboundedPriorityMailbox ,您可以在Akka Doc中找到该文档。 UnboundedPriorityMailbox。
class CustomPriorityActorMailbox(settings: ActorSystem.Settings, config: Config) extends UnboundedPriorityMailbox(
PriorityGenerator {
// Int Messages
case x: requestQuery => 1
// String Messages
case TrackMeta => 0
// Long messages
case _ => 2
})
在此类中,您可以定义优先级。
然后,您必须在配置中设置新的调度程序配置。
custom-dispatcher {
mailbox-type = "com.example.CustomPriorityActorMailbox"
}
然后,在创建演员时,您可以设置自定义的调度程序:
val myPriorityActor = system.actorOf(Props[MyActor].withDispatcher("custom-dispatcher"))
希望对您有帮助!