Обработка Akka актера ограниченного почтового ящика MessageQueueAppendFailedException - PullRequest
5 голосов
/ 10 ноября 2011

Чтобы избежать OOM, я ограничиваю размер почтового ящика некоторых моих актеров Akka 1.1.3 общим пользовательским диспетчером.Например:

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

class MyActor extends Actor {
    self.dispatcher = Static.dispatcher
    ...
}

Я бы хотел отреагировать на переполнение почтового ящика, чтобы я мог отправить сообщение вышестоящим производителям для приостановки (примечание: это выглядит так: actor.stop(), подождите, и actor.start() будетбросить ActorStartException).Некоторая потеря данных допустима между заполнением очереди и ее разрядкой.

В главе Akka о Диспетчеры говорится

При попытке отправить сообщение наАктер выдаст исключение MessageQueueAppendFailedException («BlockingMessageTransferQueue timedout out»), если сообщение не может быть добавлено в почтовый ящик в течение времени, указанного в pushTimeout.

Где можно перехватить это исключение?

Документация звучит так, будто мне нужно обернуть каждую myActor ! message в попытку / улов.Это правильно?Я действительно хотел бы централизовать его обработку.Может ли мой Supervisor возможно перехватить его и запустить мой обработчик?

1 Ответ

0 голосов
/ 12 декабря 2012

Попробуйте использовать cc.spray.json._, поскольку он построен поверх akka или твиттера Finagle.

...