2015-06-01 9 views
0

Согласно документации Akka, DeadLetterActorRef является:Hooking Akka DeadLetterActorRef

реализация по умолчанию службы мертвой буквы, к которым Akka маршруты все сообщения, чьи направления закрыты или не существует.

Если бы я хотел «нажать на» мертвые письма после того, как актер прекращается, я просто как-то «зацепить» это DeadLetterActorRef и заставить его передать мне все, что он принимает? Или я подклассифицирую его? Или я делаю что-то совсем другое? В любом случае, как?

ответ

2

Вы можете прослушивать поток событий для событий мертвой буквы. Что-то вроде этого:

import akka.actor._ 

class DeadLetterListener extends Actor { 
    override def preStart { 
    context.system.eventStream.subscribe(self, classOf[DeadLetter]) 
    } 

    override def postStop { 
    context.system.eventStream.unsubscribe(self) 
    } 

    def receive = { 
    case DeadLetter(msg, from, to) => 
     //handle the deadletter here 
    } 
} 
+0

Thanks @cmbaxter (+1) - тогда, когда/где мой код когда-либо должен взаимодействовать с 'DeadLetterActorRef' и почему? – smeeb

+1

Это не «имеет», чтобы взаимодействовать с ним вообще. Но вы можете в конечном итоге придумать случаи в зависимости от ваших требований. Возможно, у вас есть конкретный случай использования, в котором говорится, что если конкретный актер недоступен, вы сохраняете его сообщения немного, пока он не вернется. Вы могли бы использовать что-то подобное, чтобы это произошло. Для меня я приучил слушателя следить за случаями, связанными с тире, как индикатор здоровья для нашей системы. Если уровень заболеваемости таблеток тикает, это означает, что что-то, вероятно, неверно в нашей системе – cmbaxter

+0

Еще раз спасибо @cmbaxter (+1) - последнее продолжение Я обещаю! Поэтому, когда вы говорите: «Возможно, у вас есть конкретный случай использования, в котором говорится, что если конкретный актер недоступен, вы храните его сообщения немного ... *». Итак, вы говорите, что 'DeadLetterActorRef' является постоянным или что он предоставляет API для восстановления исторических мертвых букв? Можете ли вы просто уточнить, что вы имеете в виду здесь немного больше? Еще раз спасибо! – smeeb