展开查看详情
1.A Tour of (Advanced) Akka Features in 40 Minutes Johan Janssen, Info Support @johanjanssen42
2.Content ▪ Why Akka? ▪ Sharding ▪ Local actor ▪ Persistence ▪ Remote actor ▪ Akka HTTP ▪ Scheduling ▪ Finite State Machines ▪ Cluster ▪ Conclusion ▪ Routing ▪ Questions ▪ Cluster singleton
3.Why Akka?
4.Why Akka? ▪ Concurrent ▪ Scalable ▪ Fault tolerant ▪ More natural programming experience when connecting to other systems ▪ Easy to use?
5.
6.Local actor
7.Local actor Actor on JVM 1
8. Local actor Coordinator Actor Hello conference
9.Local actor Coordinator Actor println("Hello conference")
10.class Worker extends Actor { Scala def receive = { case x => println(x) } } val system = ActorSystem("ExampleActorSystem") val workerActorRef = system.actorOf(Props[Worker]) workerActorRef ! "Hello conference"
11.Remote actor
12.Remote actor Actor on Actor on JVM 1 JVM 2
13.val workerActorRef = system.actorOf(Props[Worker]) workerActorRef ! "Hello conference" val workerActorRef = context.actorSelection("akka.tcp:// ExampleActorSystem@127.0.0.1:9005 /user/workerActor") workerActorRef ! "Hello conference"
14.akka { actor { provider = "akka.remote.RemoteActorRefProvider" } remote { enabled-transports = ["akka.remote.netty.tcp"] netty.tcp { hostname = "127.0.0.1" port = 9002
15. Remote actor StartMessage Hello conference Coordinator Worker actor actor
16. Remote actor WorkerMessage Greetings from the coordinator: Coordinator Hello Conference Worker actor actor
17. Remote actor WorkerResponse Message Item processed Coordinator successfully Worker actor actor
18.Scheduling
19. Scheduling Tick Scheduled once after 1 second system.scheduler.scheduleOnce(1 seconds, scheduleReceiveActor, Tick) Actor Tock Scheduled every 5 seconds system.scheduler.schedule(0 seconds, 5 seconds, scheduleReceiveActor, Tock)
20.Scheduling ▪ Does not work for fixed point in time like 17:00 – Use Quartz
21.Cluster
22.Cluster ActorSystem on JVM 2 ActorSystem ActorSystem on JVM 1 on JVM 3 ActorSystem on JVM 4
23.Seed nodes ▪ Contact points for automatically joining a cluster
24.akka { cluster { seed-nodes = [ "akka.tcp://ClusterNode@127.0.0.1:2551", "akka.tcp://ClusterNode@127.0.0.1:2552" ] } }
25.Cluster Worker Node Port 2551 Association failed with [akka.tcp://ClusterSystem@127.0.0.1:2552
26.Cluster Worker Node Member Up with IP: 127.0.0.1 and port: 2551 Member Up with IP: 127.0.0.1 and port: 2552 Port 2551 Worker Node Member Up with IP: 127.0.0.1 and port: 2551 Member Up with IP: 127.0.0.1 and port: 2552 Port 2552
27. Cluster Worker Node Member Up with IP: 127.0.0.1 and port: 2550 Port 2551 Coordinator Worker Node Node Port 2550 Member Up with IP: 127.0.0.1 and port: 2550 Port 2552
28.Cluster Worker RegisterWorker Node Port 2551 Coordinator Worker Node RegisterWorker Node Port 2550 Port 2552
29. Cluster Worker Node Port 2551 Coordinator Worker Node Node Port 2550 Port 2552 Worker registered with IP: 127.0.0.1 and port: 2551 Worker registered with IP: 127.0.0.1 and port: 2552