为避免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
可能会拦截它并运行我的处理程序吗?
答案 0 :(得分:0)
尝试使用cc.spray.json._,因为它是在akka或twitter的finagle之上构建的。