处理Akka actor绑定邮箱MessageQueueAppendFailedException

Blu*_*luu 5 scala fault-tolerance akka

为了避免OOM,我使用共享的自定义调度程序限制了我的一些Akka 1.1.3 actor的邮箱大小.例如:

object Static {
    val dispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher(
        "customDispatcher",
        1000,
        BoundedMailbox(capacity = 10)
    )
}

class MyActor extends Actor {
    self.dispatcher = Static.dispatcher
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想对邮箱溢出做出反应,这样我就可以向上游生产者发出暂停消息(旁注:遗憾的是actor.stop(),它看起来像是等待,并actor.start()会抛出ActorStartException).在队列填满和队列耗尽之间可以接受一些数据丢失.

Akka关于Dispatchers的章节说

当试图将消息发送到演员将抛出一个MessageQueueAppendFailedException("BlockingMessageTransferQueue传输超时"),如果消息不能由pushTimeout规定的时间内被添加到该邮箱.

我在哪里可以捕获此异常?

文档让我觉得我需要myActor ! message在try/catch中包装每个文档.是对的吗?我真的很想集中处理它.我Supervisor可能拦截它并运行我的处理程序吗?

iOS*_*Dev 0

尝试使用 cc.spray.json._ 因为它是建立在 akka 或 twitter 的 finagle 之上的。