如何知道邮箱是空的,可用于取消隐藏和发送低优先级邮件?

时间:2019-05-23 10:37:56

标签: scala akka actor

我需要一个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和发送。 预先感谢。

1 个答案:

答案 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"))

希望对您有帮助!