处理Akka actor绑定邮箱MessageQueueAppendFailedException

时间:2011-11-10 09:35:08

标签: scala akka fault-tolerance

为避免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
    ...
}

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

Akka关于Dispatchers的章节

  

当尝试向Actor发送消息时,它将抛出一个   MessageQueueAppendFailedException(“BlockingMessageTransferQueue   如果邮件无法添加到邮箱,则传输超时“)   在pushTimeout指定的时间内。

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

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

1 个答案:

答案 0 :(得分:0)

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