Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop gracefully the actor system for an akka-http server that must be deployed.

I just created my first rest server with akka-http. The problem is that I do not know how to deploy the server in such a way that I could gracefully shutdown the actor system.

For example I found something here: https://stackoverflow.com/a/17399574/5388513 where you could use Akka's microkernel, but it is deprecated. I tried using sbt-native-package, but I do not know how to gracefully shutdown the actor system.

Thank you!

like image 401
Emanuel Lal Avatar asked Nov 02 '15 15:11

Emanuel Lal


3 Answers

You can add shutdown hook:

// import scala.concurrent.duration._
//shutdown Hook
scala.sys.addShutdownHook {
  logger.info("Terminating...")
  actorSystem.terminate()
  Await.result(actorSystem.whenTerminated, 30 seconds)
  logger.info("Terminated... Bye")
}
like image 154
Mariusz Nosiński Avatar answered Oct 21 '22 01:10

Mariusz Nosiński


You could add to your main method

Runtime.getRuntime.addShutdownHook(new Thread() {
  override def run() {
    system.shutdown()
    system.awaitTermination()
  }
})

Your app will wait until actor system will be shutt down and all postStop callbacks in your actors will be executed.

like image 25
kardapoltsev Avatar answered Oct 21 '22 00:10

kardapoltsev


One solution is to add an Actor to your ActorSystem that listens for a particular signal and calls shutdown:

import akka.actor.{Actor, Props}

object ShutdownMessage

object KillSwitchActor {
  def props : Props = Props[KillSwitchActor]
}

class KillSwitchActor extends Actor {
  def receive = {
    case ShutdownMessage => context.system.shutdown()
    case _ => {}
  }
}//end class KillSwitchActor

Then you simply setup your KillSwitchActor:

import akka.actor.ActorSystem

val actorSystem : ActorSystem = ActorSystem("testKillSwitch")

val killRef = actorSystem actorOf KillSwitchActor.props

//"Say hello to my little friend!" - Tony Montana 
if(someTerminatingCondition) { killRef ! ShutdownMessage }
like image 1
Ramón J Romero y Vigil Avatar answered Oct 21 '22 00:10

Ramón J Romero y Vigil