Support Kitchen Sink pattern natively in Actor
Add it to the Actor receive orElse chaining. So user does not need to use other method than 'receive' in his code.
object Kitchen { // can be remote actor to offload processing val Sink = actor { case unknown => ... // handle message, log it, store in tx log or whatever } } trait UnknownMessageHandler { this: Actor => def onReceive: Receive def handleUnknownMessages: Receive = { case unknown => // resolve future if present, to avoid unnecessary blocking/waiting self.senderFuture.foreach(_.completeWithException(new UnknownMessageException(unknown)) Kitchen.Sink forward unknown } def receive: Receive = onReceive orElse handleUnknownMessages } class MyActor extends Actor with UnknownMessageHandler { // no need for default case def onReceive = { case msg => ... } }
Leave a comment
on 2010-10-26 17:06 *
By viktorklang
Need to work out how this should interact with become/HotSwap
Duplicate with #461