Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Akka 2.0 Reloaded

Akka 2.0 Reloaded

Knolx Session by Meetu Maltiar introducing the new features in Akka 2.0.

knoldus

May 28, 2012
Tweet

More Decks by knoldus

Other Decks in Technology

Transcript

  1. Akka 2.0 Akka name comes from Sami mythology is actually

    name of a goddess of wisdom and beauty. Akka incidentally means sister in Telugu!!
  2. The Problem It is way too hard to build =>

    correct highly concurrent systems => truly scalable systems => self-healing, fault-tolerant systems
  3. What is Akka? Right abstraction with actors for concurrent, fault-tolerant

    and scalable applications For Fault-Tolerance uses “let it crash” model Abstraction for transparent distribution for load
  4. Introducing Actors Actor is an entity encapsulating behavior, state and

    a mailbox to receive messages For a message received by Actor a thread is allocated to it Then Actors behavior is applied to the message and potentially some state is changed or messages is passed to other Actors
  5. Introducing Actors.. There is elasticity between message processing and addition

    of new messages. New messages can be added while actor execution is happening. When processing of messages is completed thread is deallocated from the actor. It can be reallocated a thread at a later time
  6. My First Actor import akka.actor.{ Actor, Props } class MyFirstActor

    extends Actor { def receive = { case msg => println("Hello!!") } }
  7. Create Actors MyFirstActor is an ActorRef Create a top level

    actor import akka.actor.{ ActorSystem, Props } val system = ActorSystem("firstApp") val myFirstActor = system.actorOf(Props[MyFirstActor])
  8. Ask: ? Returns a Future[Any] import akka.pattern.ask implicit val timeout

    = Timeout(50000 milliseconds) val future = myActor ? "hello" Await.result(future, timeout.duration).asInstanceOf[Int]
  9. Reply import akka.actor.Actor class LongWorkingActor extends Actor { def receive

    = { case number: Int => sender ! (“Hi I received ” + number) } }
  10. Actor Path val actorRef = system.actorFor("akka://actorPathApp/user/pa rent/child") val parent =

    context.actorFor("..") val sibling = context.actorFor("../sibling") val refPath = actorRef.path
  11. Supervision class Supervisor extends Actor { override val supervisorStrategy =

    OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case _: ArithmeticException => Resume case _: NullPointerException => Restart case _: IllegalArgumentException => Stop case _: Exception => Escalate } }
  12. Manage Failure class FaultTolerantService extends Actor { def receive =

    { case msg => println(msg) } override def preRestart(reason: Throwable, message: Option[Any]) = { // clean up before restart } override def postRestart(reason: Throwable) = { // init after restart } }