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可能拦截它并运行我的处理程序吗?