class PhotoUploadSupervisor extends Actor with ActorLogging {
import context._
def newChild = actorOf(Props[PhotoUploadActor])
override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case _: IOException => Restart case _ => Escalate }
def receive = { case postPhoto: POSTPhoto => newChild ! UploadPhoto(postPhoto) }
}case class POSTPhoto( blob: String,) {
require(blob.nonEmpty)
}sealed trait Commandcase class UploadPhoto(data: POSTPhoto) extends Command
sealed trait Eventcase class StateChanged(data: POSTPhoto) extends Event
class PhotoUploadActor extends PersistentActor with ActorLogging {
override def persistenceId = "photoUploadActor"
var state = POSTPhoto("fakeBlob")
def updateState(evt: StateChanged) = { state = POSTPhoto(evt.data.blob) }
val receiveRecover: Receive = { case evt: StateChanged => updateState(evt) uploadToS3() }
val receiveCommand: Receive = {
case UploadPhoto(data) => persist(StateChanged(data)) { changed => updateState(changed) uploadToS3() }
}
private def uploadToS3() = {
println(f"Uploading photo in actor ${self.path}")
/*Photo upload code goes here*/ /*It might throw an IOException*/
context.stop(self)
}
}[INFO] [09/23/2014 13:33:21.587] [on-spray-can-akka.actor.default-dispatcher-2] [akka://on-spray-can/user/$a/$a] Message [akka.persistence.JournalProtocol$ReplayedMessage] from Actor[akka://on-spray-can/user/$a#-494389522] to Actor[akka://on-spray-can/user/$a/$a#1751213071] 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'.[INFO] [09/23/2014 13:33:21.587] [on-spray-can-akka.actor.default-dispatcher-2] [akka://on-spray-can/user/$a/$a] Message [akka.persistence.JournalProtocol$ReplayedMessage] from Actor[akka://on-spray-can/user/$a#-494389522] to Actor[akka://on-spray-can/user/$a/$a#1751213071] was not delivered. [2] 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'.[INFO] [09/23/2014 13:33:21.587] [on-spray-can-akka.actor.default-dispatcher-2] [akka://on-spray-can/user/$a/$a] Message [akka.persistence.JournalProtocol$ReplayedMessage] from Actor[akka://on-spray-can/user/$a#644188776] to Actor[akka://on-spray-can/user/$a/$a#1751213071] was not delivered. [3] 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'.[INFO] [09/23/2014 13:33:21.587] [on-spray-can-akka.actor.default-dispatcher-2] [akka://on-spray-can/user/$a/$a] Message [akka.persistence.JournalProtocol$ReplayedMessage] from Actor[akka://on-spray-can/user/$a#1549609203] to Actor[akka://on-spray-can/user/$a/$a#1751213071] was not delivered. [4] 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'.[INFO] [09/23/2014 13:33:21.587] [on-spray-can-akka.actor.default-dispatcher-2] [akka://on-spray-can/user/$a/$a] Message [akka.persistence.JournalProtocol$ReplayedMessage] from Actor[akka://on-spray-can/user/$a#1549609203] to Actor[akka://on-spray-can/user/$a/$a#1751213071] was not delivered. [5] 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'.[INFO] [09/23/2014 13:33:21.587] [on-spray-can-akka.actor.default-dispatcher-2] [akka://on-spray-can/user/$a/$a] Message [akka.persistence.JournalProtocol$ReplayMessagesSuccess$] from Actor[akka://on-spray-can/system/journal#-343657892] to Actor[akka://on-spray-can/user/$a/$a#1751213071] was not delivered. [6] 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'.