|
Akka/Scala example source code file (DeadLetterListener.scala)
The DeadLetterListener.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.event
import akka.actor.Actor
import akka.actor.DeadLetter
import akka.event.Logging.Info
class DeadLetterListener extends Actor {
val eventStream = context.system.eventStream
val maxCount = context.system.settings.LogDeadLetters
var count = 0
override def preStart(): Unit =
eventStream.subscribe(self, classOf[DeadLetter])
// don't re-subscribe, skip call to preStart
override def postRestart(reason: Throwable): Unit = ()
// don't remove subscription, skip call to postStop, no children to stop
override def preRestart(reason: Throwable, message: Option[Any]): Unit = ()
override def postStop(): Unit =
eventStream.unsubscribe(self)
def receive = {
case DeadLetter(message, snd, rcp) ⇒
count += 1
val done = maxCount != Int.MaxValue && count >= maxCount
val doneMsg = if (done) ", no more dead letters will be logged" else ""
eventStream.publish(Info(rcp.path.toString, rcp.getClass,
s"Message [${message.getClass.getName}] from $snd to $rcp was not delivered. [$count] dead letters encountered$doneMsg. " +
"This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' " +
"and 'akka.log-dead-letters-during-shutdown'."))
if (done) context.stop(self)
}
}
Other Akka source code examplesHere is a short list of links related to this Akka DeadLetterListener.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.