问题
I've created an Actor that performs some basic operations and appears to be working correctly - however I'm seeing the following show up in my logs regularly
[INFO] [05/28/2014 14:24:00.673] [application-akka.actor.default-dispatcher-5] [akka://application/deadLetters] Message [akka.actor.Status$Failure] from Actor[akka://application/user/trigger_worker_supervisor#-2119432352] to Actor[akka://application/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
I would like to actually view the contents of the Failure to establish what exactly is throwing a Failure
, however I can't quite figure out how to view them.
Reading through the Akka documentation it mentions how to disable the dead-letter warning in the logs, but not how to actually write a handler to process them.
Is there a simple way to actually catch anything sent to dead-letters?
回答1:
As mentioned in the comment by @wingedsubmariner, you can subscribe to the DeadLetter
event on the main system EventStream
to be notified when deadletters happen and be able to react to that situation in a more custom manner. In order to subscribe, the code would look like this:
context.system.eventStream.subscribe(myListenerActorRef, classOf[DeadLetter])
Then, the receive for that listener actor could look something like this:
def receive = {
case DeadLetter(msg, from, to) =>
//Do my custom stuff here
}
The structure of the DeadLetter
class is:
case class DeadLetter(message: Any, sender: ActorRef, recipient: ActorRef)
来源:https://stackoverflow.com/questions/23902900/how-to-view-akka-dead-letters