Akka 2.0 Reloaded

31
2.0 Reloaded Meetu Maltiar Email: [email protected] Twitter:@meetumaltiar

description

Introducing Akka 2.0

Transcript of Akka 2.0 Reloaded

Page 1: Akka 2.0 Reloaded

2.0 Reloaded

Meetu MaltiarEmail: [email protected]

Twitter:@meetumaltiar

Page 2: Akka 2.0 Reloaded

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!!

Page 3: Akka 2.0 Reloaded

The Problem

It is way too hard to build

=> correct highly concurrent systems

=> truly scalable systems

=> self-healing, fault-tolerant systems

Page 4: Akka 2.0 Reloaded

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

Page 5: Akka 2.0 Reloaded

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

Page 6: Akka 2.0 Reloaded

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

Page 7: Akka 2.0 Reloaded
Page 8: Akka 2.0 Reloaded
Page 9: Akka 2.0 Reloaded
Page 10: Akka 2.0 Reloaded
Page 11: Akka 2.0 Reloaded

Create Application

import akka.actor.ActorSystem

val system = ActorSystem("firstApp")

Page 12: Akka 2.0 Reloaded

My First Actorimport akka.actor.{ Actor, Props }

class MyFirstActor extends Actor { def receive = { case msg => println("Hello!!") }}

Page 13: Akka 2.0 Reloaded

Create Actors

MyFirstActor is an ActorRefCreate a top level actor

import akka.actor.{ ActorSystem, Props }

val system = ActorSystem("firstApp")val myFirstActor = system.actorOf(Props[MyFirstActor])

Page 14: Akka 2.0 Reloaded

Stop Actors

Also stops all actors in hierarchy

system stop myFirstActor

Page 15: Akka 2.0 Reloaded

Send: !

fire-forget

myFirstActor ! “Hello”

Page 16: Akka 2.0 Reloaded

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]

Page 17: Akka 2.0 Reloaded

Replyimport akka.actor.Actor

class LongWorkingActor extends Actor { def receive = { case number: Int => sender ! (“Hi I received ” + number) }}

Page 18: Akka 2.0 Reloaded

Routers

RoundRobin

Random

SmallestMailBox

BroadCast

ScatterGaherFirstCompleted

Page 19: Akka 2.0 Reloaded

Routers...

val router = system.actorOf(Props[RouterWorkerActor].withRouter(RoundRobinRouter(nrOfInstances = 5)))

Page 20: Akka 2.0 Reloaded

Let It CrashFault Tolerance

Page 21: Akka 2.0 Reloaded
Page 22: Akka 2.0 Reloaded
Page 23: Akka 2.0 Reloaded
Page 24: Akka 2.0 Reloaded
Page 25: Akka 2.0 Reloaded
Page 26: Akka 2.0 Reloaded
Page 27: Akka 2.0 Reloaded

Actor Path

val actorRef = system.actorFor("akka://actorPathApp/user/parent/child")

val parent = context.actorFor("..")

val sibling = context.actorFor("../sibling")

val refPath = actorRef.path

Page 28: Akka 2.0 Reloaded

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 }}

Page 29: Akka 2.0 Reloaded

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 }}

Page 30: Akka 2.0 Reloaded

Code Samples

https://github.com/meetumaltiar/AkkaKnolX

Page 31: Akka 2.0 Reloaded

References

Viktor Klang talk on Akka 2.0 at NE Scala symposium

Akka website akka.io