├── .gitignore ├── .travis.yml ├── FirstAkkaApplication ├── README └── src │ └── main │ ├── java │ └── akka │ │ └── first │ │ └── app │ │ └── java │ │ ├── messages │ │ ├── Result.java │ │ ├── MapData.java │ │ ├── WordCount.java │ │ └── ReduceData.java │ │ ├── MapReduceApplication.java │ │ └── actors │ │ ├── MasterActor.java │ │ └── AggregateActor.java │ └── scala │ └── akka │ └── first │ └── app │ └── scala │ ├── actors │ ├── MasterActor.scala │ ├── AggregateActor.scala │ ├── ReduceActor.scala │ └── MapActor.scala │ └── MapReduceApplication.scala ├── LoadGeneratorExample ├── readme └── src │ └── main │ └── java │ └── org │ └── akka │ └── essentials │ └── loadgenerator │ ├── .DS_Store │ ├── WorkerActor.java │ └── JobControllerActor.java ├── HttpActors ├── app │ ├── views │ │ ├── index.scala.html │ │ └── main.scala.html │ └── controllers │ │ ├── Application.java │ │ ├── ServerActor.java │ │ └── ServerActorApp.java └── conf │ └── routes ├── AkkaSupervisorExample └── src │ └── main │ ├── java │ └── org │ │ └── akka │ │ └── essentials │ │ └── supervisor │ │ ├── example3 │ │ ├── Result.java │ │ ├── DeadWorker.java │ │ ├── RegisterWorker.java │ │ ├── MyActorSystem.java │ │ ├── WorkerActor.java │ │ └── MonitorActor.java │ │ ├── example1 │ │ └── WorkerActor.java │ │ └── example2 │ │ ├── WorkerActor2.java │ │ └── WorkerActor1.java │ ├── resources │ └── application.conf │ └── scala │ └── org │ └── akka │ └── essentials │ └── supervisor │ ├── example3 │ ├── WorkerActor.scala │ ├── MonitorActor.scala │ └── MyActorSystem.scala │ ├── example1 │ ├── WorkerActor.scala │ └── SupervisorActor.scala │ └── example2 │ ├── WorkerActor1.scala │ ├── WorkerActor2.scala │ └── SupervisorActor.scala ├── AkkaPersistentExample ├── src │ └── main │ │ └── java │ │ └── org │ │ └── akka │ │ └── essentials │ │ ├── data │ │ ├── Operator.java │ │ ├── OperationCmd.java │ │ └── CalculationEvent.java │ │ └── actor │ │ └── SnapshotExample.java └── resources │ └── application.conf ├── AkkaRemotingExample ├── LocalNodeApp │ └── src │ │ └── main │ │ ├── resources │ │ └── application.conf │ │ ├── scala │ │ └── org │ │ │ └── akka │ │ │ └── essentials │ │ │ └── localnode │ │ │ ├── LocalNodeApplication.scala │ │ │ └── LocalActor.scala │ │ └── java │ │ └── org │ │ └── akka │ │ └── essentials │ │ └── localnode │ │ ├── LocalNodeApplication.java │ │ └── LocalActor.java └── RemoteNodeApp │ └── src │ └── main │ ├── resources │ └── application.conf │ ├── scala │ └── org │ │ └── akka │ │ └── essentials │ │ └── remotenode │ │ ├── RemoteActor.scala │ │ └── RemoteNodeApplication.scala │ └── java │ └── org │ └── akka │ └── essentials │ └── remotenode │ ├── RemoteActor.java │ └── RemoteNodeApplication.java ├── AkkaSTMExample └── src │ └── main │ ├── java │ └── org │ │ └── akka │ │ └── essentials │ │ └── stm │ │ ├── transactor │ │ ├── example │ │ │ ├── msg │ │ │ │ ├── AccountMsg.java │ │ │ │ ├── TransferMsg.java │ │ │ │ ├── AccountCredit.java │ │ │ │ ├── AccountDebit.java │ │ │ │ └── AccountBalance.java │ │ │ └── BankApplication.java │ │ └── example2 │ │ │ ├── msg │ │ │ ├── AccountMsg.java │ │ │ ├── TransferMsg.java │ │ │ ├── AccountCredit.java │ │ │ ├── AccountDebit.java │ │ │ └── AccountBalance.java │ │ │ └── BankApplication.java │ │ ├── pingpong │ │ ├── example1 │ │ │ ├── Player.java │ │ │ ├── Game.java │ │ │ └── PingPong.java │ │ ├── example2 │ │ │ ├── Player.java │ │ │ ├── Game.java │ │ │ └── PingPong.java │ │ └── example3 │ │ │ ├── Player.java │ │ │ └── Game.java │ │ └── stockticker │ │ └── example │ │ ├── Stock.java │ │ ├── StockReader.java │ │ ├── StockUpdater.java │ │ └── StockApplication.java │ └── scala │ └── org │ └── akka │ └── essentials │ └── scala │ └── stm │ ├── pingpong │ ├── example2 │ │ ├── Player.scala │ │ ├── Game.scala │ │ └── PingPong.scala │ └── example3 │ │ ├── Player.scala │ │ └── Game.scala │ ├── stockticker │ └── example │ │ ├── StockUpdater.scala │ │ ├── StockReader.scala │ │ └── StockApplication.scala │ └── transactor │ ├── example2 │ ├── AccountActor.scala │ ├── BankApplication.scala │ └── BankActor.scala │ └── example │ ├── AccountActor.scala │ ├── BankApplication.scala │ └── BankActor.scala ├── AkkaUnitTest └── src │ └── main │ ├── scala │ └── org │ │ └── akka │ │ └── essentials │ │ └── unittest │ │ └── example │ │ ├── EchoActor.scala │ │ ├── ForwardingActor.scala │ │ ├── BoomActor.scala │ │ ├── FilteringActor.scala │ │ ├── SequencingActor.scala │ │ ├── TickTock.scala │ │ └── SupervisorActor.scala │ ├── resources │ └── application.conf │ └── java │ └── org │ └── akka │ └── essentials │ └── unittest │ └── actors │ ├── EchoActor.java │ ├── BoomActor.java │ ├── ForwardingActor.java │ ├── FilteringActor.java │ ├── SequencingActor.java │ └── TickTock.java ├── ActorMessagingExample └── src │ └── main │ ├── scala │ └── org │ │ └── akka │ │ └── essentials │ │ └── scala │ │ ├── future │ │ └── example │ │ │ ├── OrderActor.scala │ │ │ ├── AddressActor.scala │ │ │ ├── OrderAggregateActor.scala │ │ │ ├── TestActorSystem.scala │ │ │ └── ProcessOrderActor.scala │ │ └── hotswap │ │ └── example │ │ ├── MyActorSystem.scala │ │ └── PingPongActor.scala │ └── java │ └── org │ └── akka │ └── essentials │ └── java │ ├── future │ └── example │ │ ├── TestActorSystem.java │ │ ├── OrderAggregateActor.java │ │ ├── messages │ │ ├── OrderHistory.java │ │ ├── Order.java │ │ └── Address.java │ │ ├── AddressActor.java │ │ └── OrderActor.java │ └── hotswap │ └── example │ ├── MyActorSystem.java │ └── PingPongActor.java ├── AkkaCustomExtension ├── src │ ├── resources │ │ └── application.conf │ └── main │ │ ├── scala │ │ └── org │ │ │ └── akka │ │ │ └── essentials │ │ │ └── custom │ │ │ └── extension │ │ │ └── example │ │ │ ├── MyActor.scala │ │ │ ├── MySQLJDBCSettings.scala │ │ │ ├── MySQLJDBCSettingsImpl.scala │ │ │ └── TestApp.scala │ │ └── java │ │ └── org │ │ └── akka │ │ └── essentials │ │ └── custom │ │ └── extension │ │ └── example │ │ ├── MyActor.java │ │ ├── MySQLJDBCSettings.java │ │ ├── MySQLJDBCSettingsImpl.java │ │ └── TestApp.java └── pom.xml ├── TypedActorExample ├── src │ └── main │ │ ├── resources │ │ └── application.conf │ │ ├── java │ │ └── org │ │ │ └── akka │ │ │ └── essentials │ │ │ └── calculator │ │ │ ├── CalculatorInt.java │ │ │ └── example3 │ │ │ └── ChildActor.java │ │ └── scala │ │ └── org │ │ └── akka │ │ └── essentials │ │ └── calculator │ │ ├── CalculatorInt.scala │ │ ├── example3 │ │ ├── ChildActor.scala │ │ └── CalculatorActorSystem.scala │ │ ├── example2 │ │ └── CalculatorActorSystem.scala │ │ └── example1 │ │ └── CalculatorActorSystem.scala └── pom.xml ├── ClientServerExample └── src │ ├── main │ ├── scala │ │ └── org │ │ │ └── akka │ │ │ └── essentials │ │ │ └── clientserver │ │ │ └── example │ │ │ ├── ServerActor.scala │ │ │ ├── ServerActorSystem.scala │ │ │ └── ClientActorSystem.scala │ └── java │ │ └── org │ │ └── akka │ │ └── essentials │ │ └── clientserver │ │ └── sample │ │ ├── ClientActor.java │ │ ├── ServerActor.java │ │ └── ServerActorSystem.java │ └── resource │ └── application.conf ├── AkkaRouterExample └── src │ └── main │ ├── scala │ └── org │ │ └── akka │ │ └── essentials │ │ └── scala │ │ └── router │ │ ├── custom │ │ └── example │ │ │ ├── MsgEchoActor.scala │ │ │ └── Example.scala │ │ ├── example │ │ ├── MsgEchoActor.scala │ │ ├── random │ │ │ └── Example.scala │ │ ├── RandomTimeActor.scala │ │ ├── broadcast │ │ │ └── Example.scala │ │ ├── smallestmailbox │ │ │ └── Example.scala │ │ ├── roundrobin │ │ │ └── Example.scala │ │ └── scattergatherfirstcomplete │ │ │ └── Example.scala │ │ └── example2 │ │ ├── custom │ │ ├── Example3.scala │ │ └── Example1.scala │ │ └── config │ │ └── Example.scala │ ├── java │ └── org │ │ └── akka │ │ └── essentials │ │ └── java │ │ └── router │ │ ├── example │ │ ├── MsgEchoActor.java │ │ ├── RandomTimeActor.java │ │ ├── broadcast │ │ │ └── Example.java │ │ ├── random │ │ │ └── Example.java │ │ ├── smallestmailbox │ │ │ └── Example.java │ │ ├── roundrobin │ │ │ └── Example.java │ │ └── scattergatherfirstcomplete │ │ │ └── Example.java │ │ ├── custom │ │ └── example │ │ │ ├── MsgEchoActor.java │ │ │ └── Example.java │ │ └── example2 │ │ ├── config │ │ └── Example.java │ │ └── custom │ │ ├── Example3.java │ │ └── Example1.java │ └── resources │ └── application.conf ├── AkkaWithZeroMQ ├── src │ └── main │ │ ├── scala │ │ └── org │ │ │ └── akka │ │ │ └── essentials │ │ │ └── zeromq │ │ │ ├── example3 │ │ │ ├── server │ │ │ │ ├── MyServerActorSystem.scala │ │ │ │ └── ServerActor.scala │ │ │ └── client │ │ │ │ ├── MyClientActorSystem.scala │ │ │ │ └── ClientActor.scala │ │ │ ├── example4 │ │ │ ├── MyActorSystem.scala │ │ │ ├── PullActor1.scala │ │ │ ├── PullActor2.scala │ │ │ └── PushActor.scala │ │ │ ├── example2 │ │ │ ├── MyActorSystem.scala │ │ │ ├── WorkerTaskA.scala │ │ │ └── WorkerTaskB.scala │ │ │ └── example1 │ │ │ ├── MyActorSystem.scala │ │ │ ├── WorkerTaskA.scala │ │ │ ├── WorkerTaskB.scala │ │ │ └── PublisherActor.scala │ │ └── java │ │ └── org │ │ └── akka │ │ └── essentials │ │ └── zeromq │ │ ├── example3 │ │ ├── server │ │ │ ├── MyServerActorSystem.java │ │ │ └── ServerActor.java │ │ └── client │ │ │ └── MyClientActorSystem.java │ │ ├── example4 │ │ ├── MyActorSystem.java │ │ ├── PullActor1.java │ │ ├── PullActor2.java │ │ └── PushActor.java │ │ ├── example2 │ │ ├── MyActorSystem.java │ │ ├── WorkerTaskA.java │ │ └── WorkerTaskB.java │ │ └── example1 │ │ ├── MyActorSystem.java │ │ ├── WorkerTaskA.java │ │ ├── WorkerTaskB.java │ │ └── PublisherActor.java ├── README └── pom.xml ├── GridPatternExample └── src │ └── main │ ├── java │ └── org │ │ └── akka │ │ └── essentials │ │ └── grid │ │ ├── Task.java │ │ ├── StartWorker.java │ │ ├── TaskFinished.java │ │ ├── StopWorker.java │ │ └── controller │ │ ├── RegisterRemoteWorkerActor.java │ │ └── WorkSchedulerActor.java │ └── scala │ └── org │ └── akka │ └── essentials │ └── grid │ ├── controller │ ├── RegisterRemoteWorkerActor.scala │ ├── WorkSchedulerActor.scala │ └── RemoteClientEventListener.scala │ └── worker │ └── WorkerActorSystem.scala ├── AkkaDispatcherExample └── src │ └── main │ ├── scala │ └── org │ │ └── akka │ │ └── essentials │ │ └── scala │ │ └── dispatcher │ │ ├── MsgEchoActor.scala │ │ └── example │ │ ├── Dispatcher │ │ ├── Example1.scala │ │ └── Example2.scala │ │ ├── BalancingDispatcher │ │ ├── Example2.scala │ │ └── Example1.scala │ │ ├── PinnedDispatcher │ │ └── Example.scala │ │ └── CallingThreadDispatcher │ │ └── Example.scala │ └── java │ └── org │ └── akka │ └── essentials │ └── java │ └── dispatcher │ ├── MsgEchoActor.java │ └── example │ ├── Dispatcher │ ├── Example1.java │ └── Example2.java │ ├── BalancingDispatcher │ ├── Example1.java │ └── Example2.java │ ├── PinnedDispatcher │ └── Example.java │ └── CallingThreadDispatcher │ └── Example.java ├── AkkaSerializerExample └── src │ └── main │ ├── resources │ └── application.conf │ ├── scala │ └── org │ │ └── akka │ │ └── essentials │ │ └── scala │ │ └── serializer │ │ ├── MySerializer.scala │ │ └── MySerializationApp.scala │ └── java │ └── org │ └── akka │ └── essentials │ └── serializer │ ├── MyMessage.java │ ├── MySerializer.java │ └── MySerializationApp.java ├── WordCountMapReduce └── src │ └── main │ ├── resources │ └── application.conf │ └── java │ └── org │ └── akka │ └── essentials │ └── wc │ └── mapreduce │ └── example │ ├── server │ ├── WCMapReduceActor.java │ ├── Result.java │ └── AggregateActor.java │ └── client │ ├── ClientActor.java │ └── FileReadActor.java └── DurableMailBox ├── src └── main │ ├── scala │ └── org │ │ └── akka │ │ └── essentials │ │ └── durable │ │ └── mailbox │ │ └── example │ │ └── DurableMailBox.scala │ └── java │ └── org │ └── akka │ └── essentails │ └── durable │ └── mailbox │ └── example │ └── DurableMailBox.java └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | target 3 | *.iml 4 | *.swp 5 | 6 | *.swp~ 7 | *.class -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | cache: 3 | directories: 4 | - $HOME/.m2 5 | -------------------------------------------------------------------------------- /FirstAkkaApplication/README: -------------------------------------------------------------------------------- 1 | Execute the application - 2 | 3 | mvn clean package exec:exec 4 | -------------------------------------------------------------------------------- /LoadGeneratorExample/readme: -------------------------------------------------------------------------------- 1 | #Run the Load Generator 2 | 3 | mvn exec:java -Dexec.mainClass="org.akka.essentials.loadgenerator.ApplicationManagerSystem" 4 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/java/akka/first/app/java/messages/Result.java: -------------------------------------------------------------------------------- 1 | package akka.first.app.java.messages; 2 | 3 | public class Result { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /HttpActors/app/views/index.scala.html: -------------------------------------------------------------------------------- 1 | @(message: String) 2 | 3 | @main("Welcome to Play 2.0") { 4 | 5 | @play20.welcome(message, style = "Java") 6 | 7 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example3/Result.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3; 2 | 3 | public class Result { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /AkkaPersistentExample/src/main/java/org/akka/essentials/data/Operator.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.data; 2 | 3 | public enum Operator { 4 | ADD, SUBTRACT, MULTIPLY, DIVIDE 5 | } 6 | -------------------------------------------------------------------------------- /AkkaRemotingExample/LocalNodeApp/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | LocalSys { 2 | akka { 3 | actor { 4 | provider = "akka.remote.RemoteActorRefProvider" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example3/DeadWorker.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3; 2 | 3 | public class DeadWorker { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /LoadGeneratorExample/src/main/java/org/akka/essentials/loadgenerator/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/write2munish/Akka-Essentials/HEAD/LoadGeneratorExample/src/main/java/org/akka/essentials/loadgenerator/.DS_Store -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example/msg/AccountMsg.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example.msg; 2 | 3 | public abstract interface AccountMsg { 4 | 5 | public void setAmount(Float bal); 6 | 7 | public Float getAmount(); 8 | } 9 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example2/msg/AccountMsg.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example2.msg; 2 | 3 | public abstract interface AccountMsg { 4 | 5 | public void setAmount(Float bal); 6 | 7 | public Float getAmount(); 8 | } 9 | -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/scala/org/akka/essentials/unittest/example/EchoActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.example 2 | import akka.actor.Actor 3 | 4 | class EchoActor extends Actor { 5 | 6 | def receive: Receive = { 7 | case message => sender ! message 8 | } 9 | } -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | TestSys { 2 | akka { 3 | mode = test 4 | event-handlers = ["akka.testkit.TestEventListener"] 5 | loglevel = DEBUG 6 | actor { 7 | debug { 8 | receive = on 9 | autoreceive = on 10 | lifecycle = on 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/pingpong/example2/Player.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.pingpong.example2 2 | 3 | class Player(myOpponent: String, myTable: PingPong) extends Runnable { 4 | 5 | override def run(): Unit = { 6 | while (myTable.hit(myOpponent)) {} 7 | } 8 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/pingpong/example3/Player.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.pingpong.example3 2 | 3 | class Player(myOpponent: String, myTable: PingPong) extends Runnable { 4 | 5 | override def run(): Unit = { 6 | while (myTable.hit(myOpponent)) {} 7 | } 8 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | SupervisorSys { 2 | akka { 3 | mode = test 4 | event-handlers = ["akka.testkit.TestEventListener"] 5 | loglevel = DEBUG 6 | actor { 7 | debug { 8 | receive = on 9 | autoreceive = on 10 | lifecycle = on 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/scala/org/akka/essentials/scala/future/example/OrderActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.future.example 2 | import akka.actor.Actor 3 | 4 | class OrderActor extends Actor { 5 | 6 | def receive = { 7 | case userId: Int => 8 | sender ! new Order(userId, 123, 345, 5) 9 | } 10 | } -------------------------------------------------------------------------------- /AkkaCustomExtension/src/resources/application.conf: -------------------------------------------------------------------------------- 1 | TestApp { 2 | connection { 3 | db { 4 | mysql { 5 | url = "jdbc:mysql://localhost:3306/" 6 | dbname = "sampleDB" 7 | driver = "com.mysql.jdbc.Driver" 8 | username = "root" 9 | userpassword = "password" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /HttpActors/app/controllers/Application.java: -------------------------------------------------------------------------------- 1 | package controllers; 2 | 3 | import play.*; 4 | import play.mvc.*; 5 | 6 | import views.html.*; 7 | 8 | public class Application extends Controller { 9 | 10 | public static Result index() { 11 | return ok(index.render("Your new application is ready.")); 12 | 13 | } 14 | } -------------------------------------------------------------------------------- /TypedActorExample/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | TypedActorExample{ 2 | defaultDispatcher { 3 | type = Dispatcher 4 | executor = "fork-join-executor" 5 | fork-join-executor { 6 | parallelism-min = 2 7 | parallelism-factor = 2.0 8 | parallelism-max = 4 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /AkkaPersistentExample/resources/application.conf: -------------------------------------------------------------------------------- 1 | akka.persistence.journal.leveldb.dir = "target/example/journal" 2 | akka.persistence.snapshot-store.local.dir = "target/example/snapshots" 3 | 4 | # DO NOT USE THIS IN PRODUCTION !!! 5 | # See also https://github.com/typesafehub/activator/issues/287 6 | akka.persistence.journal.leveldb.native = false 7 | 8 | -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/java/org/akka/essentials/unittest/actors/EchoActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.actors; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class EchoActor extends UntypedActor { 6 | @Override 7 | public void onReceive(Object message) throws Exception { 8 | sender().tell(message); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/scala/org/akka/essentials/unittest/example/ForwardingActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.example 2 | import akka.actor.ActorRef 3 | import akka.actor.Actor 4 | 5 | class ForwardingActor(next: ActorRef) extends Actor { 6 | 7 | def receive: Receive = { 8 | case message => next ! message 9 | } 10 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/scala/org/akka/essentials/scala/future/example/AddressActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.future.example 2 | import akka.actor.Actor 3 | 4 | class AddressActor extends Actor { 5 | 6 | def receive = { 7 | case userId: Int => 8 | sender ! new Address(userId, "Munish Gupta", "Sarjapura Road", "Bangalore, India") 9 | } 10 | } -------------------------------------------------------------------------------- /AkkaRemotingExample/RemoteNodeApp/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | RemoteSys { 2 | akka { 3 | actor { 4 | provider = "akka.remote.RemoteActorRefProvider" 5 | } 6 | remote { 7 | transport = "akka.remote.netty.NettyRemoteTransport" 8 | netty { 9 | hostname = "10.101.161.20" 10 | port = 2552 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/scala/org/akka/essentials/scala/future/example/OrderAggregateActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.future.example 2 | import akka.actor.ActorLogging 3 | import akka.actor.Actor 4 | 5 | class OrderAggregateActor extends Actor { 6 | def receive = { 7 | case orderHistory: OrderHistory => 8 | println(orderHistory.toString()) 9 | } 10 | } -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/scala/org/akka/essentials/unittest/example/BoomActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.example 2 | import akka.actor.Actor 3 | 4 | class BoomActor extends Actor { 5 | def receive: Receive = { 6 | case message: String => throw new IllegalArgumentException("boom!") 7 | case message: Integer => throw new NullPointerException("caput") 8 | } 9 | } -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/scala/org/akka/essentials/unittest/example/FilteringActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.example 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorRef 5 | 6 | class FilteringActor(next: ActorRef) extends Actor { 7 | def receive: Receive = { 8 | case message: String => next ! message 9 | } 10 | } -------------------------------------------------------------------------------- /AkkaRemotingExample/RemoteNodeApp/src/main/scala/org/akka/essentials/remotenode/RemoteActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.remotenode 2 | import akka.actor.Actor 3 | 4 | class RemoteActor extends Actor { 5 | def receive: Receive = { 6 | case message: String => 7 | // Get reference to the message sender and reply back 8 | sender.tell(message + " got something") 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example/msg/TransferMsg.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example.msg; 2 | 3 | public class TransferMsg { 4 | 5 | Float amtToBeTransferred; 6 | 7 | public TransferMsg(Float amt) { 8 | amtToBeTransferred = amt; 9 | } 10 | 11 | public Float getAmtToBeTransferred() { 12 | return amtToBeTransferred; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example2/msg/TransferMsg.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example2.msg; 2 | 3 | public class TransferMsg { 4 | 5 | Float amtToBeTransferred; 6 | 7 | public TransferMsg(Float amt) { 8 | amtToBeTransferred = amt; 9 | } 10 | 11 | public Float getAmtToBeTransferred() { 12 | return amtToBeTransferred; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ClientServerExample/src/main/scala/org/akka/essentials/clientserver/example/ServerActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.clientserver.example 2 | import akka.actor.Actor 3 | 4 | class ServerActor extends Actor { 5 | def receive: Receive = { 6 | case message: String => 7 | // Get reference to the message sender and reply back 8 | sender.tell(message + " got something") 9 | } 10 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/custom/example/MsgEchoActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.custom.example 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | 5 | class MsgEchoActor extends Actor with ActorLogging{ 6 | def receive: Receive = { 7 | case message => 8 | log.info("Received Message {} in Actor {}", message, self.path.name) 9 | } 10 | } -------------------------------------------------------------------------------- /HttpActors/app/controllers/ServerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.remoteActor.sample; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class ServerActor extends UntypedActor { 6 | 7 | @Override 8 | public void onReceive(Object arg0) throws Exception { 9 | if(arg0 instanceof String){ 10 | getSender().tell(arg0 + " - got something from server"); 11 | } 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/scala/org/akka/essentials/custom/extension/example/MyActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example 2 | import akka.actor.Actor 3 | 4 | class MyActor extends Actor { 5 | def receive: Receive = { 6 | case _ => 7 | val mysqlSetting = MySQLJDBCSettings(context.system) 8 | println(mysqlSetting.DB_USER_NAME) 9 | println(mysqlSetting.DB_USER_PASSWORD) 10 | } 11 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example3/server/MyServerActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example3.server 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | 5 | object MyServerActorSystem { 6 | 7 | def main(args: Array[String]): Unit = { 8 | val system = ActorSystem("zeromqServerTest") 9 | system.actorOf(Props[ServerActor], name = "server") 10 | } 11 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example/MsgEchoActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | 5 | class MsgEchoActor extends Actor with ActorLogging { 6 | def receive: Receive = { 7 | case message => 8 | Thread.sleep(10) 9 | log.info("Received Message {} in Actor {}", message, self.path.name) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/README: -------------------------------------------------------------------------------- 1 | There are 4 examples covering the ZeroMQ functionality 2 | 3 | Example 1 - covers the Publisher - Subscriber connection usage 4 | 5 | Example 2 - covers the Router - Dealer connection usage 6 | 7 | Example 3 - covers the Request - Reply connection usage 8 | 9 | Example 4 - covers the Pull Push connection usage 10 | 11 | 12 | All the examples assume that zeromq library has been complied and available in the class path. -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example/MsgEchoActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class MsgEchoActor extends UntypedActor { 6 | 7 | @Override 8 | public void onReceive(Object msg) throws Exception { 9 | System.out.println(String.format("Received Message '%s' in Actor %s", 10 | msg, getSelf().path())); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/custom/example/MsgEchoActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.custom.example; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class MsgEchoActor extends UntypedActor { 6 | 7 | @Override 8 | public void onReceive(Object msg) throws Exception { 9 | System.out.println(String.format("Received Message '%s' in Actor %s", 10 | msg, getSelf().path())); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/scala/org/akka/essentials/unittest/example/SequencingActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.example 2 | import akka.actor.Actor 3 | import akka.actor.ActorRef 4 | 5 | class SequencingActor(next: ActorRef, head: List[Integer], tail: List[Integer]) extends Actor { 6 | 7 | def receive: Receive = { 8 | case message => 9 | head map (next ! _) 10 | next ! message 11 | tail map (next ! _) 12 | } 13 | } -------------------------------------------------------------------------------- /HttpActors/conf/routes: -------------------------------------------------------------------------------- 1 | # Routes 2 | # This file defines all application routes (Higher priority routes first) 3 | # ~~~~ 4 | 5 | # Home page 6 | GET / controllers.Application.index() 7 | GET /actor/:msg controllers.ServerActorApp.process(msg: String) 8 | 9 | # Map static resources from the /public folder to the /assets URL path 10 | GET /assets/*file controllers.Assets.at(path="/public", file) 11 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/java/akka/first/app/java/messages/MapData.java: -------------------------------------------------------------------------------- 1 | package akka.first.app.java.messages; 2 | 3 | import java.util.Collections; 4 | import java.util.List; 5 | 6 | public class MapData { 7 | private List dataList; 8 | 9 | public List getDataList() { 10 | return dataList; 11 | } 12 | 13 | public MapData(List dataList) { 14 | this.dataList = Collections.unmodifiableList(dataList); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example1/Player.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example1; 2 | 3 | public class Player implements Runnable { 4 | PingPong myTable; // Table where they play 5 | String myOpponent; 6 | 7 | public Player(String opponent, PingPong table) { 8 | myTable = table; 9 | myOpponent = opponent; 10 | } 11 | 12 | public void run() { 13 | while (myTable.hit(myOpponent)) 14 | ; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example2/Player.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example2; 2 | 3 | public class Player implements Runnable { 4 | PingPong myTable; // Table where they play 5 | String myOpponent; 6 | 7 | public Player(String opponent, PingPong table) { 8 | myTable = table; 9 | myOpponent = opponent; 10 | } 11 | 12 | public void run() { 13 | while (myTable.hit(myOpponent)) 14 | ; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example3/Player.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example3; 2 | 3 | public class Player implements Runnable { 4 | PingPong myTable; // Table where they play 5 | String myOpponent; 6 | 7 | public Player(String opponent, PingPong table) { 8 | myTable = table; 9 | myOpponent = opponent; 10 | } 11 | 12 | public void run() { 13 | while (myTable.hit(myOpponent)) 14 | ; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example/msg/AccountCredit.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example.msg; 2 | 3 | public class AccountCredit implements AccountMsg { 4 | Float amount = Float.parseFloat("0"); 5 | 6 | public AccountCredit(Float amt) { 7 | amount = amt; 8 | } 9 | 10 | public void setAmount(Float bal) { 11 | amount = bal; 12 | 13 | } 14 | 15 | public Float getAmount() { 16 | return amount; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example/msg/AccountDebit.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example.msg; 2 | 3 | public class AccountDebit implements AccountMsg { 4 | Float amount = Float.parseFloat("0"); 5 | 6 | public AccountDebit(Float amt) { 7 | amount = amt; 8 | } 9 | 10 | public void setAmount(Float bal) { 11 | amount = bal; 12 | 13 | } 14 | 15 | public Float getAmount() { 16 | return amount; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example2/msg/AccountCredit.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example2.msg; 2 | 3 | public class AccountCredit implements AccountMsg { 4 | Float amount = Float.parseFloat("0"); 5 | 6 | public AccountCredit(Float amt) { 7 | amount = amt; 8 | } 9 | 10 | public void setAmount(Float bal) { 11 | amount = bal; 12 | 13 | } 14 | 15 | public Float getAmount() { 16 | return amount; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example2/msg/AccountDebit.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example2.msg; 2 | 3 | public class AccountDebit implements AccountMsg { 4 | Float amount = Float.parseFloat("0"); 5 | 6 | public AccountDebit(Float amt) { 7 | amount = amt; 8 | } 9 | 10 | public void setAmount(Float bal) { 11 | amount = bal; 12 | 13 | } 14 | 15 | public Float getAmount() { 16 | return amount; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/java/akka/first/app/java/messages/WordCount.java: -------------------------------------------------------------------------------- 1 | package akka.first.app.java.messages; 2 | 3 | public class WordCount { 4 | 5 | private String word; 6 | private Integer count; 7 | 8 | public WordCount(String inWord, Integer inCount) { 9 | word = inWord; 10 | count = inCount; 11 | } 12 | 13 | public String getWord() { 14 | return word; 15 | } 16 | 17 | public Integer getCount() { 18 | return count; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/java/org/akka/essentials/unittest/actors/BoomActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.actors; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class BoomActor extends UntypedActor { 6 | @Override 7 | public void onReceive(Object message) throws Exception { 8 | if (message instanceof String) 9 | throw new IllegalArgumentException("boom!"); 10 | else if (message instanceof Integer) 11 | throw new NullPointerException("caput"); 12 | } 13 | } -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/java/org/akka/essentials/unittest/actors/ForwardingActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.actors; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | 6 | public class ForwardingActor extends UntypedActor { 7 | ActorRef next; 8 | public ForwardingActor(ActorRef next) { 9 | this.next = next; 10 | } 11 | @Override 12 | public void onReceive(Object message) throws Exception { 13 | next.tell(message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /AkkaRemotingExample/RemoteNodeApp/src/main/java/org/akka/essentials/remotenode/RemoteActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.remotenode; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class RemoteActor extends UntypedActor { 6 | @Override 7 | public void onReceive(Object message) throws Exception { 8 | if (message instanceof String) { 9 | // Get reference to the message sender and reply back 10 | getSender().tell(message + " got something"); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | MyRouterExample{ 2 | akka.actor.deployment { 3 | /myRandomRouterActor { 4 | router = random 5 | nr-of-instances = 5 6 | } 7 | } 8 | akka { 9 | actor { 10 | provider = "akka.remote.RemoteActorRefProvider" 11 | } 12 | remote { 13 | transport = "akka.remote.netty.NettyRemoteTransport" 14 | netty { 15 | hostname = "127.0.0.1" 16 | port = 2552 17 | } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /TypedActorExample/src/main/java/org/akka/essentials/calculator/CalculatorInt.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.calculator; 2 | 3 | import akka.dispatch.Future; 4 | import akka.japi.Option; 5 | 6 | public interface CalculatorInt { 7 | 8 | public Future add(Integer first, Integer second); 9 | 10 | public Future subtract(Integer first, Integer second); 11 | 12 | public void incrementCount(); 13 | 14 | public Option incrementAndReturn(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/scala/org/akka/essentials/scala/hotswap/example/MyActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.hotswap.example 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | 5 | object MyActorSystem { 6 | 7 | def main(args: Array[String]): Unit = { 8 | val _system = ActorSystem("BecomeUnbecome") 9 | val pingPongActor = _system.actorOf(Props[PingPongActor]) 10 | pingPongActor ! PING 11 | Thread.sleep(2000) 12 | _system.shutdown 13 | } 14 | } -------------------------------------------------------------------------------- /GridPatternExample/src/main/java/org/akka/essentials/grid/Task.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid; 2 | 3 | import java.io.Serializable; 4 | 5 | public class Task implements Serializable{ 6 | /** 7 | * 8 | */ 9 | private static final long serialVersionUID = -4254133675360422392L; 10 | private int taskNumber; 11 | 12 | public Task(int inTaskNumber) { 13 | taskNumber = inTaskNumber; 14 | } 15 | 16 | public int getTaskNumber() { 17 | return taskNumber; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example3/server/MyServerActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example3.server; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.actor.Props; 5 | 6 | public class MyServerActorSystem { 7 | 8 | /** 9 | * @param args 10 | */ 11 | public static void main(String[] args) { 12 | ActorSystem system = ActorSystem.create("zeromqServerTest"); 13 | system.actorOf(new Props(ServerActor.class), "server"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example4/MyActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4 2 | 3 | import akka.actor.ActorSystem 4 | import akka.actor.Props 5 | 6 | object MyActorSystem { 7 | 8 | def main(args: Array[String]): Unit = { 9 | val system = ActorSystem("zeromqTest") 10 | system.actorOf(Props[PushActor], name = "push") 11 | system.actorOf(Props[PullActor1], name = "pull1") 12 | system.actorOf(Props[PullActor2], name = "pull2") 13 | } 14 | } -------------------------------------------------------------------------------- /GridPatternExample/src/main/java/org/akka/essentials/grid/StartWorker.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid; 2 | 3 | import java.io.Serializable; 4 | 5 | public class StartWorker implements Serializable { 6 | /** 7 | * 8 | */ 9 | private static final long serialVersionUID = 9064403102760025633L; 10 | String actorPath; 11 | 12 | public StartWorker(String inActorPath) { 13 | actorPath = inActorPath; 14 | } 15 | 16 | public String getActorPath() { 17 | return actorPath; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GridPatternExample/src/main/java/org/akka/essentials/grid/TaskFinished.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid; 2 | 3 | import java.io.Serializable; 4 | 5 | public class TaskFinished implements Serializable { 6 | /** 7 | * 8 | */ 9 | private static final long serialVersionUID = 970605290206333478L; 10 | int taskNumber; 11 | 12 | public TaskFinished(int inTaskNumber) { 13 | taskNumber = inTaskNumber; 14 | } 15 | 16 | public int getTaskNumber() { 17 | return taskNumber; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example3/client/MyClientActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example3.client 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | import akka.routing.RoundRobinRouter 5 | 6 | object MyClientActorSystem { 7 | 8 | def main(args: Array[String]): Unit = { 9 | val system = ActorSystem("zeromqTest") 10 | system.actorOf(Props[ClientActor].withRouter( 11 | RoundRobinRouter(nrOfInstances = 3)), name = "client") 12 | } 13 | } -------------------------------------------------------------------------------- /GridPatternExample/src/main/java/org/akka/essentials/grid/StopWorker.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid; 2 | 3 | import java.io.Serializable; 4 | 5 | public class StopWorker implements Serializable { 6 | 7 | /** 8 | * 9 | */ 10 | private static final long serialVersionUID = -7202366558361921698L; 11 | String actorPath; 12 | 13 | public StopWorker(String inActorPath) { 14 | actorPath = inActorPath; 15 | } 16 | 17 | public String getActorPath() { 18 | return actorPath; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/java/org/akka/essentials/unittest/actors/FilteringActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.actors; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | 6 | public class FilteringActor extends UntypedActor { 7 | ActorRef next; 8 | 9 | public FilteringActor(ActorRef next) { 10 | this.next = next; 11 | } 12 | 13 | @Override 14 | public void onReceive(Object message) throws Exception { 15 | if (message instanceof String) 16 | next.tell(message); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/java/akka/first/app/java/messages/ReduceData.java: -------------------------------------------------------------------------------- 1 | package akka.first.app.java.messages; 2 | 3 | import java.util.Collections; 4 | import java.util.Map; 5 | 6 | public class ReduceData { 7 | 8 | private Map reduceDataList; 9 | 10 | public Map getReduceDataList() { 11 | return reduceDataList; 12 | } 13 | 14 | public ReduceData(Map reduceDataList) { 15 | this.reduceDataList = Collections.unmodifiableMap(reduceDataList); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /AkkaPersistentExample/src/main/java/org/akka/essentials/data/OperationCmd.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.data; 2 | 3 | import java.io.Serializable; 4 | 5 | public class OperationCmd implements Serializable { 6 | 7 | private static final long serialVersionUID = -4380291231130584842L; 8 | 9 | private final CalculationEvent event; 10 | 11 | public OperationCmd(Operator op, Integer num) { 12 | this.event = new CalculationEvent(op, num); 13 | 14 | } 15 | 16 | public CalculationEvent getCalculationEvent() { 17 | return event; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /HttpActors/app/views/main.scala.html: -------------------------------------------------------------------------------- 1 | @(title: String)(content: Html) 2 | 3 | 4 | 5 | 6 | 7 | @title 8 | 9 | 10 | 11 | 12 | 13 | @content 14 | 15 | 16 | -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/scala/org/akka/essentials/custom/extension/example/MySQLJDBCSettings.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example 2 | import akka.actor.ExtensionIdProvider 3 | import akka.actor.ExtensionId 4 | import akka.actor.ExtendedActorSystem 5 | 6 | object MySQLJDBCSettings extends ExtensionId[MySQLJDBCSettingsImpl] with ExtensionIdProvider { 7 | 8 | override def lookup = MySQLJDBCSettings 9 | 10 | override def createExtension(system: ExtendedActorSystem) = new MySQLJDBCSettingsImpl(system.settings.config) 11 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example3/RegisterWorker.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3; 2 | 3 | import akka.actor.ActorRef; 4 | 5 | public class RegisterWorker { 6 | ActorRef worker; 7 | ActorRef supervisor; 8 | 9 | public RegisterWorker(ActorRef worker, ActorRef supervisor) { 10 | this.worker = worker; 11 | this.supervisor = supervisor; 12 | } 13 | 14 | public ActorRef getWorker() { 15 | return worker; 16 | } 17 | 18 | public ActorRef getSupervisor() { 19 | return supervisor; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/java/org/akka/essentials/custom/extension/example/MyActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class MyActor extends UntypedActor { 6 | 7 | @Override 8 | public void onReceive(Object message) throws Exception { 9 | MySQLJDBCSettingsImpl mysqlSetting = MySQLJDBCSettings.SettingsProvider 10 | .get(getContext().system()); 11 | 12 | System.out.println(mysqlSetting.DB_USER_NAME); 13 | System.out.println(mysqlSetting.DB_USER_PASSWORD); 14 | 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/stockticker/example/StockUpdater.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.stockticker.example 2 | 3 | 4 | class StockUpdater(stock: Stock) extends Runnable { 5 | 6 | var countDown = 5 7 | 8 | override def run(): Unit = { 9 | while (countDown > 0) { 10 | Thread.sleep(55) 11 | val x: String = Thread.currentThread().getName 12 | stock.price.send(_ + 10) 13 | println("Quote update by thread (" + x + "), current price " + stock.price.get) 14 | countDown = countDown - 1 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example2/MyActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example2 2 | import akka.dispatch.Await 3 | import akka.actor.ActorSystem 4 | import akka.util.Timeout 5 | import akka.actor.Props 6 | 7 | object MyActorSystem { 8 | 9 | def main(args: Array[String]): Unit = { 10 | val system = ActorSystem("zeromqTest") 11 | system.actorOf(Props[RouterActor], name = "router") 12 | system.actorOf(Props[WorkerTaskA], name = "workerA") 13 | system.actorOf(Props[WorkerTaskB], name = "workerB") 14 | } 15 | } -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/scala/org/akka/essentials/scala/dispatcher/MsgEchoActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.dispatcher 2 | import akka.actor.Actor 3 | 4 | class MsgEchoActor extends Actor { 5 | @volatile var messageProcessed:Int = 0 6 | 7 | def receive: Receive = { 8 | case message => 9 | messageProcessed = messageProcessed + 1 10 | Thread.sleep(100) 11 | println( 12 | "Received Message %s in Actor %s using Thread %s, total message processed %s".format( message, 13 | self.path.name, Thread.currentThread().getName(), messageProcessed)) 14 | } 15 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/stockticker/example/StockReader.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.stockticker.example 2 | 3 | 4 | class StockReader(stock: Stock) extends Runnable { 5 | 6 | var countDown = 10 7 | 8 | override def run(): Unit = { 9 | while (countDown > 0) { 10 | Thread.sleep(51) 11 | val x: String = Thread.currentThread().getName 12 | val stockTicker = stock.price.get() 13 | println("Quote read by thread (" + x + "), current price " + stockTicker) 14 | countDown = countDown - 1 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example1/MyActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1 2 | import akka.dispatch.Await 3 | import akka.actor.ActorSystem 4 | import akka.util.Timeout 5 | import akka.actor.Props 6 | 7 | object MyActorSystem { 8 | 9 | def main(args: Array[String]): Unit = { 10 | val system = ActorSystem("zeromqTest") 11 | system.actorOf(Props[PublisherActor], name = "publisher") 12 | system.actorOf(Props[WorkerTaskA], name = "workerA") 13 | system.actorOf(Props[WorkerTaskB], name = "workerB") 14 | } 15 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example4/MyActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.actor.Props; 5 | 6 | public class MyActorSystem { 7 | 8 | /** 9 | * @param args 10 | */ 11 | public static void main(String[] args) { 12 | ActorSystem system = ActorSystem.create("zeromqTest"); 13 | system.actorOf(new Props(PushActor.class), "push"); 14 | system.actorOf(new Props(PullActor1.class), "pull1"); 15 | system.actorOf(new Props(PullActor2.class), "pull2"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example3/client/MyClientActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example3.client; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.actor.Props; 5 | import akka.routing.RoundRobinRouter; 6 | 7 | public class MyClientActorSystem { 8 | 9 | /** 10 | * @param args 11 | */ 12 | public static void main(String[] args) { 13 | ActorSystem system = ActorSystem.create("zeromqClientTest"); 14 | system.actorOf(new Props(ClientActor.class) 15 | .withRouter(new RoundRobinRouter(3)), "client"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /TypedActorExample/src/main/scala/org/akka/essentials/calculator/CalculatorInt.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.calculator 2 | import akka.dispatch.Future 3 | import akka.actor.TypedActor.Receiver 4 | import akka.actor.TypedActor.PreStart 5 | import akka.actor.TypedActor.Supervisor 6 | import akka.actor.TypedActor.PostStop 7 | 8 | 9 | trait CalculatorInt extends Receiver { 10 | 11 | def add(first: Int, second: Int): Future[Int] 12 | 13 | def subtract(first: Int, second: Int): Future[Int] 14 | 15 | def incrementCount(): Unit 16 | 17 | def incrementAndReturn(): Option[Int] 18 | } 19 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/custom/example/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.custom.example 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | import akka.routing.RandomRouter 5 | 6 | object Example { 7 | 8 | def main(args: Array[String]): Unit = { 9 | 10 | val _system = ActorSystem("CustomRouterExample") 11 | val burstyMessageRouter = _system.actorOf(Props[MsgEchoActor].withRouter(new BurstyMessageRouter(5, 2))) 12 | 1 to 13 foreach { 13 | i => burstyMessageRouter ! i 14 | } 15 | _system.shutdown() 16 | } 17 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example2/MyActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example2; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.actor.Props; 5 | 6 | public class MyActorSystem { 7 | 8 | /** 9 | * @param args 10 | */ 11 | public static void main(String[] args) { 12 | ActorSystem system = ActorSystem.create("zeromqTest"); 13 | system.actorOf(new Props(WorkerTaskA.class), "workerA"); 14 | system.actorOf(new Props(WorkerTaskB.class), "workerB"); 15 | system.actorOf(new Props(RouterActor.class), "router"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example1/MyActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.actor.Props; 5 | 6 | public class MyActorSystem { 7 | 8 | /** 9 | * @param args 10 | */ 11 | public static void main(String[] args) { 12 | ActorSystem system = ActorSystem.create("zeromqTest"); 13 | system.actorOf(new Props(WorkerTaskA.class), "workerA"); 14 | system.actorOf(new Props(WorkerTaskB.class), "workerB"); 15 | system.actorOf(new Props(PublisherActor.class), "publisher"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/java/org/akka/essentials/java/dispatcher/MsgEchoActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.dispatcher; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class MsgEchoActor extends UntypedActor { 6 | 7 | int messageProcessed = 0; 8 | 9 | @Override 10 | public void onReceive(Object msg) throws Exception { 11 | messageProcessed++; 12 | 13 | System.out.println(String.format( 14 | "Received Message '%s' in Actor %s using Thread %s, total message processed %s", msg, 15 | getSelf().path().name(), Thread.currentThread().getName(),messageProcessed)); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example/msg/AccountBalance.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example.msg; 2 | 3 | public class AccountBalance { 4 | 5 | String accountNumber = ""; 6 | float accountBalance = 0; 7 | 8 | public AccountBalance(String no) { 9 | accountNumber = no; 10 | } 11 | 12 | public AccountBalance(String no, float bal) { 13 | accountNumber = no; 14 | accountBalance = bal; 15 | } 16 | 17 | public float getBalance() { 18 | return accountBalance; 19 | } 20 | 21 | public String getAccountNumber() { 22 | return accountNumber; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /AkkaSerializerExample/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | MySerializableSys { 2 | include "common" 3 | akka { 4 | actor { 5 | serialize-messages = on 6 | serializers { 7 | java = "akka.serialization.JavaSerializer" 8 | proto = "akka.serialization.ProtobufSerializer" 9 | my-serialization = "org.akka.essentials.serializer.MySerializer" 10 | } 11 | serialization-bindings { 12 | "java.lang.Integer" = java 13 | "org.akka.essentials.serializer.MyMessage" = my-serialization 14 | "com.google.protobuf.Message" = proto 15 | } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /AkkaRemotingExample/RemoteNodeApp/src/main/scala/org/akka/essentials/remotenode/RemoteNodeApplication.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.remotenode 2 | import akka.kernel.Bootable 3 | import akka.actor.ActorSystem 4 | import akka.actor.Props 5 | import com.typesafe.config.ConfigFactory 6 | 7 | class RemoteNodeApplication extends Bootable { 8 | val system = ActorSystem("RemoteNodeApp", ConfigFactory 9 | .load().getConfig("RemoteSys")) 10 | 11 | def startup = { 12 | system.actorOf(Props[RemoteActor], name = "remoteActor") 13 | } 14 | 15 | def shutdown = { 16 | system.shutdown() 17 | } 18 | } -------------------------------------------------------------------------------- /ClientServerExample/src/main/scala/org/akka/essentials/clientserver/example/ServerActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.clientserver.example 2 | 3 | import com.typesafe.config.ConfigFactory 4 | 5 | import akka.actor.ActorSystem 6 | import akka.actor.Props 7 | 8 | object ServerActorSystem { 9 | def main(args: Array[String]): Unit = { 10 | // load the configuration 11 | val config = ConfigFactory.load().getConfig("ServerSys") 12 | 13 | val system = ActorSystem("ServerSys", config) 14 | 15 | val serverActor = system.actorOf(Props[ServerActor], name = "serverActor") 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /GridPatternExample/src/main/scala/org/akka/essentials/grid/controller/RegisterRemoteWorkerActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid.controller 2 | import akka.actor.ActorRef 3 | import akka.actor.ActorLogging 4 | import akka.actor.Actor 5 | 6 | class RegisterRemoteWorkerActor(val jobControllerActor: ActorRef) extends Actor with ActorLogging { 7 | def receive: Receive = { 8 | case message: StartWorker => 9 | log.info("Received Registration Info from " + message.toString()); 10 | jobControllerActor.tell(message); 11 | case _ => 12 | log.error("Wrong message type received"); 13 | } 14 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example2/msg/AccountBalance.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example2.msg; 2 | 3 | public class AccountBalance { 4 | 5 | String accountNumber = ""; 6 | Float accountBalance = Float.valueOf(0); 7 | 8 | public AccountBalance(String no) { 9 | accountNumber = no; 10 | } 11 | 12 | public AccountBalance(String no, Float bal) { 13 | accountNumber = no; 14 | accountBalance = bal; 15 | } 16 | 17 | public Float getBalance() { 18 | return accountBalance; 19 | } 20 | 21 | public String getAccountNumber() { 22 | return accountNumber; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/future/example/TestActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.future.example; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | 7 | public class TestActorSystem { 8 | 9 | public static void main(String[] args) throws Exception { 10 | ActorSystem _system = ActorSystem.create("FutureUsageExample"); 11 | ActorRef processOrder = _system.actorOf(new Props( 12 | ProcessOrderActor.class)); 13 | processOrder.tell(Integer.valueOf(456)); 14 | 15 | Thread.sleep(5000); 16 | 17 | _system.shutdown(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/future/example/OrderAggregateActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.future.example; 2 | 3 | import org.akka.essentials.java.future.example.messages.OrderHistory; 4 | 5 | import akka.actor.UntypedActor; 6 | 7 | public class OrderAggregateActor extends UntypedActor { 8 | 9 | @Override 10 | public void onReceive(Object message) throws Exception { 11 | if (message instanceof OrderHistory) { 12 | OrderHistory orderHistory = (OrderHistory) message; 13 | System.out.println("Order History -> " + orderHistory.getOrder() 14 | + "\n" + orderHistory.getAddress()); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /AkkaRemotingExample/LocalNodeApp/src/main/scala/org/akka/essentials/localnode/LocalNodeApplication.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.localnode 2 | import com.typesafe.config.ConfigFactory 3 | import akka.actor.ActorSystem 4 | import akka.actor.Props 5 | 6 | object LocalNodeApplication { 7 | 8 | def main(args: Array[String]): Unit = { 9 | // load the configuration 10 | val config = ConfigFactory.load().getConfig("LocalSys") 11 | val system = ActorSystem("LocalNodeApp", config) 12 | val clientActor = system.actorOf(Props[LocalActor]) 13 | clientActor ! "Hello" 14 | Thread.sleep(4000) 15 | system.shutdown() 16 | } 17 | } -------------------------------------------------------------------------------- /GridPatternExample/src/main/scala/org/akka/essentials/grid/controller/WorkSchedulerActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid.controller 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.util.duration._ 5 | 6 | class WorkSchedulerActor extends Actor with ActorLogging { 7 | 8 | def receive: Receive = { 9 | case value:Int => 10 | val cancellable = context.system.scheduler.scheduleOnce(value.milliseconds, sender, SendWork) 11 | case _ => 12 | log.info("Received work sending request") 13 | val cancellable = context.system.scheduler.scheduleOnce(6000 milliseconds, sender, SendWork) 14 | } 15 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/hotswap/example/MyActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.hotswap.example; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | 7 | public class MyActorSystem { 8 | 9 | public static void main(String[] args) throws Exception { 10 | 11 | ActorSystem _system = ActorSystem.create("BecomeUnbecome"); 12 | ActorRef pingPongActor = _system 13 | .actorOf(new Props(PingPongActor.class)); 14 | 15 | pingPongActor.tell(PingPongActor.PING, pingPongActor); 16 | 17 | Thread.sleep(2000); 18 | 19 | _system.shutdown(); 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /AkkaRemotingExample/RemoteNodeApp/src/main/java/org/akka/essentials/remotenode/RemoteNodeApplication.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.remotenode; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.actor.Props; 5 | import akka.kernel.Bootable; 6 | 7 | import com.typesafe.config.ConfigFactory; 8 | 9 | public class RemoteNodeApplication implements Bootable { 10 | final ActorSystem system = ActorSystem.create("RemoteNodeApp", ConfigFactory 11 | .load().getConfig("RemoteSys")); 12 | 13 | public void shutdown() { 14 | system.shutdown(); 15 | } 16 | 17 | public void startup() { 18 | system.actorOf(new Props(RemoteActor.class), "remoteActor"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example/random/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example.random 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | import org.akka.essentials.scala.router.example.MsgEchoActor 5 | import akka.routing.RandomRouter 6 | 7 | object Example { 8 | def main(args: Array[String]): Unit = { 9 | val _system = ActorSystem("RandomRouterExample") 10 | val randomRouter = _system.actorOf(Props[MsgEchoActor].withRouter(RandomRouter(5)), name = "myRandomRouterActor") 11 | 1 to 10 foreach { 12 | i => randomRouter ! i 13 | } 14 | _system.shutdown() 15 | } 16 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/future/example/messages/OrderHistory.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.future.example.messages; 2 | 3 | public class OrderHistory { 4 | public Order getOrder() { 5 | return order; 6 | } 7 | 8 | public void setOrder(Order order) { 9 | this.order = order; 10 | } 11 | 12 | public Address getAddress() { 13 | return address; 14 | } 15 | 16 | public void setAddress(Address address) { 17 | this.address = address; 18 | } 19 | 20 | Order order; 21 | Address address; 22 | 23 | public OrderHistory(Order inOrder, Address inAddress) { 24 | order = inOrder; 25 | address = inAddress; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example/RandomTimeActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example 2 | import akka.actor.Actor 3 | import java.util.Random 4 | import java.util.concurrent.TimeUnit 5 | import akka.actor.ActorLogging 6 | 7 | class RandomTimeActor extends Actor with ActorLogging{ 8 | val randomGenerator = new Random() 9 | def receive: Receive = { 10 | case message => 11 | val sleepTime = randomGenerator.nextInt(5) 12 | log.info("Actor # {} will return in {}", self.path.name, sleepTime) 13 | TimeUnit.SECONDS.sleep(sleepTime); 14 | sender.tell("Message from Actor #" + self.path) 15 | } 16 | } -------------------------------------------------------------------------------- /ClientServerExample/src/resource/application.conf: -------------------------------------------------------------------------------- 1 | ServerSys { 2 | include "common" 3 | akka { 4 | actor { 5 | provider = "akka.remote.RemoteActorRefProvider" 6 | } 7 | remote { 8 | transport = "akka.remote.netty.NettyRemoteTransport" 9 | netty { 10 | hostname = "127.0.0.1" 11 | port = 2552 12 | } 13 | } 14 | } 15 | } 16 | 17 | ClientSys { 18 | include "common" 19 | akka { 20 | actor { 21 | provider = "akka.remote.RemoteActorRefProvider" 22 | 23 | deployment { 24 | /remoteServerActor { 25 | remote = "akka://ServerSys@127.0.0.1:2552" 26 | } 27 | } 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/future/example/AddressActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.future.example; 2 | 3 | import org.akka.essentials.java.future.example.messages.Address; 4 | 5 | import akka.actor.UntypedActor; 6 | 7 | public class AddressActor extends UntypedActor { 8 | 9 | @Override 10 | public void onReceive(Object message) throws Exception { 11 | if (message instanceof Integer) { 12 | Integer userId = (Integer) message; 13 | // ideally we will get address for given user id 14 | Address address = new Address(userId, "Munish Gupta", 15 | "Sarjapura Road", "Bangalore, India"); 16 | getSender().tell(address); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/future/example/OrderActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.future.example; 2 | 3 | import org.akka.essentials.java.future.example.messages.Order; 4 | 5 | import akka.actor.UntypedActor; 6 | 7 | public class OrderActor extends UntypedActor { 8 | 9 | @Override 10 | public void onReceive(Object message) throws Exception { 11 | if (message instanceof Integer) { 12 | Integer userId = (Integer) message; 13 | // ideally we will get list of orders for given user id 14 | Order order = new Order(Integer.valueOf(123), Float.valueOf(345), 15 | Integer.valueOf(5)); 16 | getSender().tell(order); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/scala/org/akka/essentials/custom/extension/example/MySQLJDBCSettingsImpl.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example 2 | import akka.actor.Extension 3 | import com.typesafe.config.Config 4 | 5 | class MySQLJDBCSettingsImpl(config: Config) extends Extension { 6 | val DB_URL: String = config.getString("connection.db.mysql.url") 7 | val DB_NAME: String = config.getString("connection.db.mysql.dbname") 8 | val DB_DRIVER: String = config.getString("connection.db.mysql.driver") 9 | val DB_USER_NAME: String = config.getString("connection.db.mysql.username") 10 | val DB_USER_PASSWORD: String = config.getString("connection.db.mysql.userpassword") 11 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example/broadcast/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example.broadcast 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | import org.akka.essentials.scala.router.example.MsgEchoActor 5 | import akka.routing.BroadcastRouter 6 | 7 | object Example { 8 | 9 | def main(args: Array[String]): Unit = { 10 | val _system = ActorSystem("BroadcastRouterExample") 11 | val broadcastRouter = _system.actorOf(Props[MsgEchoActor].withRouter(BroadcastRouter(5)), name = "myBroadcastRouterActor") 12 | 1 to 1 foreach { 13 | i => broadcastRouter ! i 14 | } 15 | _system.shutdown() 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /WordCountMapReduce/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | WCMapReduceApp{ 2 | include "common" 3 | akka { 4 | actor { 5 | provider = "akka.remote.RemoteActorRefProvider" 6 | } 7 | remote { 8 | transport = "akka.remote.netty.NettyRemoteTransport" 9 | netty { 10 | hostname = "127.0.0.1" 11 | port = 2552 12 | } 13 | } 14 | } 15 | priorityMailBox-dispatcher { 16 | mailbox-type = "org.akka.essentials.wc.mapreduce.example.server.WCMapReduceServer$MyPriorityMailBox" 17 | } 18 | } 19 | 20 | WCMapReduceClientApp{ 21 | include "common" 22 | akka { 23 | actor { 24 | provider = "akka.remote.RemoteActorRefProvider" 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /AkkaPersistentExample/src/main/java/org/akka/essentials/data/CalculationEvent.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.data; 2 | 3 | import java.io.Serializable; 4 | 5 | public class CalculationEvent implements Serializable { 6 | 7 | private static final long serialVersionUID = -8292612144802844338L; 8 | private final Operator op; 9 | private final Integer number; 10 | 11 | public CalculationEvent(Operator op, Integer num) { 12 | this.op = op; 13 | this.number = num; 14 | } 15 | 16 | public Operator getOperator() { 17 | return op; 18 | } 19 | 20 | public Integer getNumber() { 21 | return number; 22 | } 23 | 24 | public String toString() { 25 | return op.toString() + "," + number; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/stockticker/example/Stock.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.stockticker.example; 2 | 3 | import akka.agent.Agent; 4 | 5 | public class Stock { 6 | private String symbol; 7 | private Agent price; 8 | 9 | public Stock(String inSymbol, Agent inPrice) { 10 | symbol = inSymbol; 11 | price = inPrice; 12 | } 13 | 14 | public String getSymbol() { 15 | return symbol; 16 | } 17 | 18 | public void setSymbol(String symbol) { 19 | this.symbol = symbol; 20 | } 21 | 22 | public Agent getPrice() { 23 | return price; 24 | } 25 | 26 | public void setPrice(Agent price) { 27 | this.price = price; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/scala/org/akka/essentials/scala/hotswap/example/PingPongActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.hotswap.example 2 | 3 | import akka.actor.Actor 4 | 5 | case class PING() 6 | case class PONG() 7 | 8 | class PingPongActor extends Actor { 9 | import context._ 10 | var count = 0 11 | def receive: Receive = { 12 | case PING => 13 | println("PING") 14 | count = count + 1 15 | Thread.sleep(100) 16 | self ! PONG 17 | become { 18 | case PONG => 19 | println("PONG") 20 | count = count + 1 21 | Thread.sleep(100) 22 | self ! PING 23 | unbecome() 24 | } 25 | if(count > 10) context.stop(self) 26 | } 27 | } -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/scala/org/akka/essentials/custom/extension/example/TestApp.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example 2 | 3 | import com.typesafe.config.ConfigFactory 4 | 5 | import akka.actor.actorRef2Scala 6 | import akka.actor.ActorSystem 7 | import akka.actor.Props 8 | 9 | object TestApp { 10 | 11 | def main(args: Array[String]): Unit = { 12 | val system = ActorSystem("Extension-Test", ConfigFactory.load() 13 | .getConfig("TestApp")) 14 | 15 | val ref = system.actorOf(Props[MyActor]) 16 | ref ! "print" 17 | 18 | val mysqlSetting = MySQLJDBCSettings(system) 19 | 20 | println(mysqlSetting.DB_NAME) 21 | println(mysqlSetting.DB_URL) 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example4/PullActor1.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.zeromq.Connect 5 | import akka.zeromq.Listener 6 | import akka.zeromq.SocketType 7 | import akka.zeromq.ZMQMessage 8 | import akka.zeromq.ZeroMQExtension 9 | 10 | class PullActor1 extends Actor with ActorLogging { 11 | val pullSocket = ZeroMQExtension(context.system).newSocket(SocketType.Pull, Connect("tcp://127.0.0.1:1234"), Listener(self)) 12 | 13 | def receive: Receive = { 14 | case m: ZMQMessage => 15 | var mesg = new String(m.payload(0)) 16 | log.info("Received Message -> {}", mesg) 17 | } 18 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example4/PullActor2.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4 2 | import akka.zeromq.ZeroMQExtension 3 | import akka.actor.ActorLogging 4 | import akka.zeromq.ZMQMessage 5 | import akka.actor.Actor 6 | import akka.zeromq.SocketType 7 | import akka.zeromq.Connect 8 | import akka.zeromq.Listener 9 | 10 | class PullActor2 extends Actor with ActorLogging { 11 | val pullSocket = ZeroMQExtension(context.system).newSocket(SocketType.Pull, Connect("tcp://127.0.0.1:1234"), Listener(self)) 12 | 13 | def receive: Receive = { 14 | case m: ZMQMessage => 15 | var mesg = new String(m.payload(0)) 16 | log.info("Received Message -> {}", mesg) 17 | } 18 | } -------------------------------------------------------------------------------- /AkkaRemotingExample/LocalNodeApp/src/main/java/org/akka/essentials/localnode/LocalNodeApplication.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.localnode; 2 | 3 | import com.typesafe.config.ConfigFactory; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | 9 | /** 10 | * Hello world! 11 | * 12 | */ 13 | public class LocalNodeApplication { 14 | public static void main(String[] args) throws Exception { 15 | ActorSystem _system = ActorSystem.create("LocalNodeApp",ConfigFactory 16 | .load().getConfig("LocalSys")); 17 | ActorRef localActor = _system.actorOf(new Props(LocalActor.class)); 18 | localActor.tell("Hello"); 19 | 20 | Thread.sleep(5000); 21 | _system.shutdown(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example/RandomTimeActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | import java.util.Random; 6 | import java.util.concurrent.TimeUnit; 7 | 8 | public class RandomTimeActor extends UntypedActor { 9 | 10 | Random randomGenerator = new Random(); 11 | 12 | @Override 13 | public void onReceive(Object msg) throws Exception { 14 | int sleepTime = randomGenerator.nextInt(5); 15 | System.out.println(String.format("Actor # '%s' sleeping for '%s'", 16 | getSelf().path().name(), sleepTime)); 17 | TimeUnit.SECONDS.sleep(sleepTime); 18 | getSender().tell("Message from Actor #" + getSelf().path()); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/scala/org/akka/essentials/scala/future/example/TestActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.future.example 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | 5 | case class Order(userId: Int, orderNo: Int, amount: Float, noOfItems: Int) 6 | case class Address(userId: Int, fullName: String, address1: String, address2: String) 7 | case class OrderHistory(order: Order, address: Address) 8 | 9 | object TestActorSystem { 10 | 11 | def main(args: Array[String]): Unit = { 12 | 13 | val _system = ActorSystem("FutureUsageExample") 14 | val processOrder = _system.actorOf(Props[ProcessOrderActor]) 15 | processOrder ! 456 16 | Thread.sleep(5000) 17 | _system.shutdown 18 | } 19 | } -------------------------------------------------------------------------------- /TypedActorExample/src/main/scala/org/akka/essentials/calculator/example3/ChildActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.calculator.example3 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.event.Logging 5 | import akka.actor.ActorLogging 6 | 7 | class ChildActor extends Actor with ActorLogging { 8 | 9 | override def preStart() { 10 | log.info("Child Actor Started > {}", self.path) 11 | } 12 | 13 | def receive: Receive = { 14 | case message: String => throw new IllegalArgumentException("boom!") 15 | case message: Integer => sender ! message * message 16 | case _ => unhandled() 17 | } 18 | 19 | override def postStop() { 20 | log.info("Child Actor Stopped > {}", self.path) 21 | } 22 | } -------------------------------------------------------------------------------- /ClientServerExample/src/main/scala/org/akka/essentials/clientserver/example/ClientActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.clientserver.example 2 | 3 | import com.typesafe.config.ConfigFactory 4 | 5 | import akka.actor.actorRef2Scala 6 | import akka.actor.ActorSystem 7 | import akka.actor.Props 8 | 9 | object ClientActorSystem { 10 | def main(args: Array[String]): Unit = { 11 | // load the configuration 12 | val config = ConfigFactory.load().getConfig("ClientSys") 13 | 14 | val system = ActorSystem("WorkerSys", config) 15 | 16 | val clientActor = system.actorOf(Props[ClientActor], name = "clientActor") 17 | 18 | clientActor ! "Hi there" 19 | 20 | Thread.sleep(4000) 21 | 22 | system.shutdown() 23 | } 24 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/future/example/messages/Order.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.future.example.messages; 2 | 3 | import scala.collection.mutable.StringBuilder; 4 | 5 | public class Order { 6 | 7 | Integer userId; 8 | Integer orderNo; 9 | Float amount; 10 | Integer noOfItems; 11 | 12 | public Order(Integer inOrderNo, Float inAmount, Integer inNoOfItems) { 13 | orderNo = inOrderNo; 14 | amount = inAmount; 15 | noOfItems = inNoOfItems; 16 | } 17 | 18 | public String toString() { 19 | StringBuilder result = new StringBuilder(); 20 | result.append("OrderNo->").append(orderNo).append(" ,Amount->") 21 | .append(amount).append(" ,NoOfItems->").append(noOfItems); 22 | return result.toString(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example/smallestmailbox/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.router.example.smallestmailbox 2 | import org.akka.essentials.scala.router.example.MsgEchoActor 3 | 4 | import akka.actor.actorRef2Scala 5 | import akka.actor.ActorSystem 6 | import akka.actor.Props 7 | import akka.routing.SmallestMailboxRouter 8 | 9 | object Example { 10 | def main(args: Array[String]): Unit = { 11 | val _system = ActorSystem.create("SmallestMailBoxRouterExample") 12 | val smallestMailBoxRouter = _system.actorOf(Props[MsgEchoActor].withRouter(SmallestMailboxRouter(5)), name = "mySmallestMailBoxRouterActor") 13 | 1 to 10 foreach { 14 | i => smallestMailBoxRouter ! i 15 | } 16 | _system.shutdown() 17 | } 18 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/stockticker/example/StockReader.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.stockticker.example; 2 | 3 | public class StockReader implements Runnable { 4 | 5 | private int countDown = 10; 6 | private Stock stock; 7 | 8 | public StockReader(Stock inStock) { 9 | stock = inStock; 10 | } 11 | 12 | public void run() { 13 | while (countDown > 0) { 14 | try { 15 | Thread.sleep(50); 16 | } catch (InterruptedException e) { 17 | } 18 | String x = Thread.currentThread().getName(); 19 | Float stockTicker = stock.getPrice().get(); 20 | System.out.println("Quote read by thread (" + x 21 | + "), current price " + stockTicker); 22 | countDown = countDown - 1; 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example1/WorkerTaskA.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.zeromq.Connect 5 | import akka.zeromq.Listener 6 | import akka.zeromq.SocketType 7 | import akka.zeromq.Subscribe 8 | import akka.zeromq.ZMQMessage 9 | import akka.zeromq.ZeroMQExtension 10 | 11 | class WorkerTaskA extends Actor with ActorLogging { 12 | val subSocket = ZeroMQExtension(context.system).newSocket(SocketType.Sub, Connect("tcp://127.0.0.1:1234"), Listener(self), Subscribe("someTopic")) 13 | 14 | def receive = { 15 | case m: ZMQMessage => 16 | var mesg = new String(m.payload(1)) 17 | log.info("Received Message @ A -> {}", mesg) 18 | } 19 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example1/WorkerTaskB.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.zeromq.Connect 5 | import akka.zeromq.Listener 6 | import akka.zeromq.SocketType 7 | import akka.zeromq.Subscribe 8 | import akka.zeromq.ZMQMessage 9 | import akka.zeromq.ZeroMQExtension 10 | 11 | class WorkerTaskB extends Actor with ActorLogging { 12 | val subSocket = ZeroMQExtension(context.system).newSocket(SocketType.Sub, Connect("tcp://127.0.0.1:1234"), Listener(self), Subscribe("someTopic")) 13 | 14 | def receive = { 15 | case m: ZMQMessage => 16 | var mesg = new String(m.payload(1)) 17 | log.info("Received Message @ B -> {}", mesg) 18 | } 19 | } -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/java/org/akka/essentials/custom/extension/example/MySQLJDBCSettings.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example; 2 | 3 | import akka.actor.AbstractExtensionId; 4 | import akka.actor.ExtendedActorSystem; 5 | import akka.actor.ExtensionIdProvider; 6 | 7 | public class MySQLJDBCSettings extends 8 | AbstractExtensionId implements 9 | ExtensionIdProvider { 10 | 11 | public final static MySQLJDBCSettings SettingsProvider = new MySQLJDBCSettings(); 12 | 13 | public MySQLJDBCSettings lookup() { 14 | return MySQLJDBCSettings.SettingsProvider; 15 | } 16 | 17 | public MySQLJDBCSettingsImpl createExtension(ExtendedActorSystem system) { 18 | return new MySQLJDBCSettingsImpl(system.settings().config()); 19 | } 20 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example2/custom/Example3.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example2.custom 2 | import akka.routing.DefaultResizer 3 | import akka.actor.ActorSystem 4 | import akka.actor.Props 5 | import org.akka.essentials.scala.router.example.MsgEchoActor 6 | import akka.routing.RandomRouter 7 | 8 | object Example3 { 9 | def main(args: Array[String]): Unit = { 10 | val _system = ActorSystem.create("CustomRouteeRouterExample") 11 | 12 | val resizer = DefaultResizer(lowerBound = 2, upperBound = 15) 13 | 14 | val randomRouter = _system.actorOf(Props[MsgEchoActor].withRouter(RandomRouter(resizer = Some(resizer)))) 15 | 1 to 10 foreach { 16 | i => randomRouter ! i 17 | } 18 | _system.shutdown() 19 | } 20 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example3/server/ServerActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example3.server 2 | import akka.zeromq.ZeroMQExtension 3 | import akka.actor.ActorLogging 4 | import akka.actor.Actor 5 | import akka.zeromq.SocketType 6 | import akka.zeromq.ZMQMessage 7 | import akka.zeromq.Bind 8 | import akka.zeromq.Listener 9 | import akka.zeromq.Frame 10 | 11 | class ServerActor extends Actor with ActorLogging { 12 | val repSocket = ZeroMQExtension(context.system).newSocket(SocketType.Rep, Bind("tcp://127.0.0.1:1234"), Listener(self)) 13 | 14 | def receive: Receive = { 15 | case m: ZMQMessage => 16 | var mesg = new String(m.payload(0)); 17 | repSocket ! ZMQMessage(Seq(Frame(mesg + " Good to see you!"))) 18 | } 19 | } -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/scala/org/akka/essentials/scala/dispatcher/example/Dispatcher/Example1.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.dispatcher.example.Dispatcher 2 | import akka.actor.ActorSystem 3 | import com.typesafe.config.ConfigFactory 4 | import akka.actor.Props 5 | import org.akka.essentials.scala.dispatcher.MsgEchoActor 6 | import akka.routing.RoundRobinRouter 7 | 8 | object Example1 { 9 | def main(args: Array[String]): Unit = {} 10 | val _system = ActorSystem.create("default-dispatcher",ConfigFactory.load().getConfig("MyDispatcherExample")) 11 | 12 | val actor = _system.actorOf(Props[MsgEchoActor].withDispatcher("defaultDispatcher").withRouter( 13 | RoundRobinRouter(5))) 14 | 15 | 0 to 25 foreach { 16 | i => actor ! i 17 | } 18 | Thread.sleep(3000) 19 | _system.shutdown() 20 | } -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/scala/org/akka/essentials/scala/dispatcher/example/Dispatcher/Example2.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.dispatcher.example.Dispatcher 2 | import akka.actor.ActorSystem 3 | import com.typesafe.config.ConfigFactory 4 | import akka.actor.Props 5 | import org.akka.essentials.scala.dispatcher.MsgEchoActor 6 | import akka.routing.RoundRobinRouter 7 | 8 | object Example2 { 9 | def main(args: Array[String]): Unit = {} 10 | val _system = ActorSystem.create("default-dispatcher",ConfigFactory.load().getConfig("MyDispatcherExample")) 11 | 12 | val actor = _system.actorOf(Props[MsgEchoActor].withDispatcher("defaultDispatcher1").withRouter( 13 | RoundRobinRouter(5))) 14 | 15 | 0 to 25 foreach { 16 | i => actor ! i 17 | } 18 | Thread.sleep(3000) 19 | _system.shutdown() 20 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example2/config/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example2.config 2 | import org.akka.essentials.scala.router.example.MsgEchoActor 3 | import akka.actor.actorRef2Scala 4 | import akka.actor.ActorSystem 5 | import akka.actor.Props 6 | import akka.routing.FromConfig 7 | import com.typesafe.config.ConfigFactory 8 | 9 | object Example { 10 | def main(args: Array[String]): Unit = { 11 | val _system = ActorSystem.create("RandomRouterExample", ConfigFactory.load() 12 | .getConfig("MyRouterExample")) 13 | val randomRouter = _system.actorOf(Props[MsgEchoActor].withRouter(FromConfig()), name = "myRandomRouterActor") 14 | 1 to 10 foreach { 15 | i => randomRouter ! i 16 | } 17 | _system.shutdown() 18 | } 19 | } -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/scala/akka/first/app/scala/actors/MasterActor.scala: -------------------------------------------------------------------------------- 1 | package akka.first.app.scala.actors 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorRef 5 | import akka.actor.Props 6 | import akka.first.app.scala.Result 7 | 8 | class MasterActor extends Actor { 9 | 10 | val aggregateActor: ActorRef = context.actorOf(Props[AggregateActor], name = "aggregate") 11 | val reduceActor: ActorRef = context.actorOf(Props(new ReduceActor(aggregateActor)), name = "reduce") 12 | val mapActor: ActorRef = context.actorOf(Props(new MapActor(reduceActor)), name = "map") 13 | 14 | def receive: Receive = { 15 | case message: String => 16 | mapActor ! message 17 | case message: Result => 18 | aggregateActor ! message 19 | } 20 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example1/Game.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example1; 2 | 3 | public class Game { 4 | public static void main(String args[]) { 5 | PingPong table = new PingPong(); 6 | Thread alice = new Thread(new Player("bob", table)); 7 | Thread bob = new Thread(new Player("alice", table)); 8 | 9 | alice.setName("alice"); 10 | bob.setName("bob"); 11 | alice.start(); // alice starts playing 12 | bob.start(); // bob starts playing 13 | try { 14 | // Wait 5 seconds 15 | Thread.sleep(5000); 16 | } catch (InterruptedException e) { 17 | } 18 | 19 | table.hit("DONE"); // cause the players to quit their threads. 20 | try { 21 | Thread.sleep(100); 22 | } catch (InterruptedException e) { 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example3/MyActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | 7 | public class MyActorSystem { 8 | 9 | /** 10 | * @param args 11 | * @throws Exception 12 | */ 13 | public static void main(String[] args) throws Exception { 14 | ActorSystem system = ActorSystem.create("faultTolerance"); 15 | 16 | ActorRef supervisor = system.actorOf(new Props(SupervisorActor.class), 17 | "supervisor"); 18 | 19 | supervisor.tell(Integer.valueOf(10)); 20 | supervisor.tell("10"); 21 | 22 | Thread.sleep(5000); 23 | 24 | supervisor.tell(Integer.valueOf(10)); 25 | 26 | system.shutdown(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/scala/org/akka/essentials/scala/dispatcher/example/BalancingDispatcher/Example2.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.dispatcher.example.BalancingDispatcher 2 | import akka.actor.ActorSystem 3 | import com.typesafe.config.ConfigFactory 4 | import akka.actor.Props 5 | import org.akka.essentials.scala.dispatcher.MsgEchoActor 6 | import akka.routing.RoundRobinRouter 7 | 8 | object Example2 { 9 | def main(args: Array[String]): Unit = {} 10 | val _system = ActorSystem.create("balancing-dispatcher",ConfigFactory.load().getConfig("MyDispatcherExample")) 11 | 12 | val actor = _system.actorOf(Props[MsgEchoActor].withDispatcher("balancingDispatcher1").withRouter( 13 | RoundRobinRouter(5))) 14 | 15 | 0 to 25 foreach { 16 | i => actor ! i 17 | } 18 | Thread.sleep(3000) 19 | _system.shutdown() 20 | } -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/scala/org/akka/essentials/unittest/example/TickTock.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.example 2 | import akka.actor.Actor 3 | 4 | case class Tick(message: String) 5 | case class Tock(message: String) 6 | 7 | class TickTock extends Actor { 8 | 9 | var state = false 10 | 11 | def receive: Receive = { 12 | case message: Tick => tick(message) 13 | case message: Tock => tock(message) 14 | case _ => throw new IllegalArgumentException("boom!") 15 | } 16 | 17 | def tock(message: Tock) = { 18 | // do some processing here 19 | if (state == false) 20 | state = true 21 | else 22 | state = false 23 | } 24 | 25 | def tick(message: Tick) = { 26 | // do some processing here 27 | sender.tell("processed the tick message") 28 | } 29 | } -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/future/example/messages/Address.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.future.example.messages; 2 | 3 | import scala.collection.mutable.StringBuilder; 4 | 5 | public class Address { 6 | Integer userId; 7 | String fullName; 8 | String address1; 9 | String address2; 10 | 11 | public Address(Integer inUserId, String inFullName, String inAddress1, 12 | String inAddress2) { 13 | userId = inUserId; 14 | fullName = inFullName; 15 | address1 = inAddress1; 16 | address2 = inAddress2; 17 | } 18 | 19 | public String toString() { 20 | StringBuilder result = new StringBuilder(); 21 | result.append("FullName->").append(fullName).append(" ,Address1->") 22 | .append(address1).append(" ,Address2->").append(address2); 23 | return result.toString(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/java/org/akka/essentials/unittest/actors/SequencingActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.actors; 2 | 3 | import java.util.List; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.UntypedActor; 7 | 8 | public class SequencingActor extends UntypedActor { 9 | ActorRef next; 10 | List head; 11 | List tail; 12 | 13 | public SequencingActor(ActorRef next, List head, List tail) { 14 | this.next = next; 15 | this.head = head; 16 | this.tail = tail; 17 | } 18 | 19 | @Override 20 | public void onReceive(Object message) throws Exception { 21 | for (Integer value : head) { 22 | sender().tell(value); 23 | } 24 | sender().tell(message); 25 | for (Integer value : tail) { 26 | sender().tell(value); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /HttpActors/app/controllers/ServerActorApp.java: -------------------------------------------------------------------------------- 1 | package controllers; 2 | 3 | import play.*; 4 | import play.mvc.*; 5 | 6 | import views.html.*; 7 | 8 | import static akka.pattern.Patterns.ask; 9 | import play.libs.Akka; 10 | import akka.actor.*; 11 | import play.libs.F.Function; 12 | import org.akka.essentials.remoteActor.sample.ServerActor; 13 | 14 | public class ServerActorApp extends Controller { 15 | 16 | private static ActorRef myServerActor = Akka.system().actorOf(new Props(ServerActor.class)); 17 | 18 | public static Result process(String msg){ 19 | 20 | return async( 21 | Akka.asPromise(ask(myServerActor,msg, 1000)).map( 22 | new Function() { 23 | public Result apply(Object response) { 24 | return ok(response.toString()); 25 | } 26 | } 27 | ) 28 | ); 29 | } 30 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example3/WorkerActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorLogging 5 | 6 | class WorkerActor extends Actor with ActorLogging { 7 | import org.akka.essentials.supervisor.example1.Result 8 | var state: Int = 0 9 | 10 | override def preStart() { 11 | log.info("Starting WorkerActor instance hashcode # {}", this.hashCode()) 12 | } 13 | override def postStop() { 14 | log.info("Stopping WorkerActor instance hashcode # {}", this.hashCode()); 15 | } 16 | def receive: Receive = { 17 | case value: Int => 18 | state = value 19 | case result: Result => 20 | sender ! state 21 | case _ => 22 | context.stop(self) 23 | } 24 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/custom/example/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.custom.example; 2 | 3 | import org.akka.essentials.java.router.example.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | 9 | public class Example { 10 | 11 | /** 12 | * @param args 13 | */ 14 | public static void main(String[] args) { 15 | ActorSystem _system = ActorSystem.create("CustomRouterExample"); 16 | ActorRef burstyMessageRouter = _system.actorOf(new Props( 17 | MsgEchoActor.class).withRouter(new BurstyMessageRouter(5,2))); 18 | 19 | for (int i = 1; i <= 13; i++) { 20 | //sends series of messages in a round robin way to all the actors 21 | burstyMessageRouter.tell(i); 22 | } 23 | _system.shutdown(); 24 | 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/scala/org/akka/essentials/scala/dispatcher/example/PinnedDispatcher/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.dispatcher.example.PinnedDispatcher 2 | import org.akka.essentials.scala.dispatcher.MsgEchoActor 3 | 4 | import com.typesafe.config.ConfigFactory 5 | 6 | import akka.actor.actorRef2Scala 7 | import akka.actor.ActorSystem 8 | import akka.actor.Props 9 | import akka.routing.RoundRobinRouter 10 | 11 | object Example { 12 | def main(args: Array[String]): Unit = {} 13 | val _system = ActorSystem.create("pinned-dispatcher",ConfigFactory.load().getConfig("MyDispatcherExample")) 14 | 15 | val actor = _system.actorOf(Props[MsgEchoActor].withDispatcher("pinnedDispatcher").withRouter( 16 | RoundRobinRouter(5))) 17 | 18 | 0 to 25 foreach { 19 | i => actor ! i 20 | } 21 | Thread.sleep(3000) 22 | _system.shutdown() 23 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example2/WorkerTaskA.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example2 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.zeromq.Connect 5 | import akka.zeromq.Identity 6 | import akka.zeromq.Listener 7 | import akka.zeromq.SocketType 8 | import akka.zeromq.ZMQMessage 9 | import akka.zeromq.ZeroMQExtension 10 | import akka.zeromq.Frame 11 | 12 | class WorkerTaskA extends Actor with ActorLogging { 13 | val subSocket = ZeroMQExtension(context.system).newSocket(SocketType.Dealer, Connect("tcp://127.0.0.1:1234"), Listener(self), Identity("A".getBytes())) 14 | 15 | def receive = { 16 | case m: ZMQMessage => 17 | var mesg = new String(m.payload(0)) 18 | subSocket.tell((new ZMQMessage(Frame(mesg 19 | + " - Workload Processed by A")))) 20 | } 21 | } -------------------------------------------------------------------------------- /LoadGeneratorExample/src/main/java/org/akka/essentials/loadgenerator/WorkerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.loadgenerator; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.UntypedActor; 7 | import scala.concurrent.duration.Duration; 8 | 9 | public class WorkerActor extends UntypedActor { 10 | 11 | private ActorRef jobController; 12 | 13 | @Override 14 | public void onReceive(Object message) throws Exception { 15 | // using scheduler to send the reply after 1000 milliseconds 16 | getContext() 17 | .system() 18 | .scheduler() 19 | .scheduleOnce(Duration.create(1000, TimeUnit.MILLISECONDS), 20 | jobController, "Done",getContext().dispatcher()); 21 | } 22 | 23 | public WorkerActor(ActorRef inJobController) { 24 | jobController = inJobController; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example/roundrobin/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example.roundrobin 2 | import org.akka.essentials.scala.router.example.MsgEchoActor 3 | 4 | 5 | import akka.actor.ActorSystem 6 | import akka.actor.Props 7 | import akka.routing.RoundRobinRouter 8 | import java.util.concurrent.TimeUnit 9 | 10 | object Example { 11 | def main(args: Array[String]): Unit = { 12 | val _system = ActorSystem("RoundRobinRouterExample") 13 | val roundRobinRouter = _system.actorOf(Props[MsgEchoActor].withRouter(RoundRobinRouter(5)), name = "myRoundRobinRouterActor") 14 | 1 to 10 foreach { 15 | i => 16 | roundRobinRouter ! i 17 | if (i == 5) { 18 | TimeUnit.MILLISECONDS.sleep(100) 19 | System.out.println("\n") 20 | } 21 | } 22 | _system.shutdown() 23 | } 24 | } -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/scala/org/akka/essentials/scala/dispatcher/example/CallingThreadDispatcher/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.dispatcher.example.CallingThreadDispatcher 2 | import org.akka.essentials.scala.dispatcher.MsgEchoActor 3 | 4 | import com.typesafe.config.ConfigFactory 5 | 6 | import akka.actor.actorRef2Scala 7 | import akka.actor.ActorSystem 8 | import akka.actor.Props 9 | import akka.routing.RoundRobinRouter 10 | 11 | object Example { 12 | def main(args: Array[String]): Unit = {} 13 | val _system = ActorSystem.create("callingThread-dispatcher",ConfigFactory.load().getConfig("MyDispatcherExample")) 14 | 15 | val actor = _system.actorOf(Props[MsgEchoActor].withDispatcher("CallingThreadDispatcher").withRouter( 16 | RoundRobinRouter(5))) 17 | 18 | 0 to 5 foreach { 19 | i => actor ! i 20 | } 21 | Thread.sleep(3000) 22 | _system.shutdown() 23 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example/broadcast/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example.broadcast; 2 | 3 | import org.akka.essentials.java.router.example.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.BroadcastRouter; 9 | 10 | public class Example { 11 | 12 | /** 13 | * @param args 14 | */ 15 | public static void main(String[] args) { 16 | ActorSystem _system = ActorSystem.create("BroadcastRouterExample"); 17 | ActorRef broadcastRouter = _system.actorOf(new Props(MsgEchoActor.class) 18 | .withRouter(new BroadcastRouter(5)),"myBroadcastRouterActor"); 19 | 20 | for (int i = 1; i <= 2; i++) { 21 | //same message goes to all the actors 22 | broadcastRouter.tell(i); 23 | } 24 | _system.shutdown(); 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /AkkaSerializerExample/src/main/scala/org/akka/essentials/scala/serializer/MySerializer.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.serializer 2 | import com.google.gson.GsonBuilder 3 | import akka.serialization.Serializer 4 | 5 | class MySerializer extends Serializer { 6 | def identifier = 12062010 7 | def includeManifest: Boolean = true 8 | val gson = new GsonBuilder().serializeNulls().create() 9 | 10 | // "toBinary" serializes the given object to an Array of Bytes 11 | def toBinary(obj: AnyRef): Array[Byte] = { 12 | gson.toJson(obj).getBytes() 13 | } 14 | // "fromBinary" deserializes the given array, 15 | // using the type hint (if any, see "includeManifest" above) 16 | // into the optionally provided classLoader. 17 | def fromBinary(bytes: Array[Byte], 18 | clazz: Option[Class[_]]): AnyRef = { 19 | gson.fromJson(new String(bytes), clazz.toList.first) 20 | } 21 | } -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/scala/org/akka/essentials/scala/dispatcher/example/BalancingDispatcher/Example1.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.dispatcher.example.BalancingDispatcher 2 | import akka.actor.ActorRef 3 | import akka.actor.ActorSystem 4 | import com.typesafe.config.ConfigFactory 5 | import akka.actor.Props 6 | import org.akka.essentials.scala.dispatcher.MsgEchoActor 7 | import akka.routing.RandomRouter 8 | import akka.routing.RoundRobinRouter 9 | 10 | object Example1 { 11 | def main(args: Array[String]): Unit = {} 12 | val _system = ActorSystem.create("balancing-dispatcher",ConfigFactory.load().getConfig("MyDispatcherExample")) 13 | 14 | val actor = _system.actorOf(Props[MsgEchoActor].withDispatcher("balancingDispatcher").withRouter( 15 | RoundRobinRouter(5))) 16 | 17 | 0 to 25 foreach { 18 | i => actor ! i 19 | } 20 | Thread.sleep(3000) 21 | _system.shutdown() 22 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example2/WorkerTaskB.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example2 2 | import akka.zeromq.ZeroMQExtension 3 | import akka.actor.ActorLogging 4 | import akka.zeromq.ZMQMessage 5 | import akka.actor.Actor 6 | import akka.zeromq.SocketType 7 | import akka.zeromq.Connect 8 | import akka.zeromq.Listener 9 | import akka.zeromq.Subscribe 10 | import akka.zeromq.Identity 11 | import akka.zeromq.Frame 12 | 13 | class WorkerTaskB extends Actor with ActorLogging { 14 | val subSocket = ZeroMQExtension(context.system).newSocket(SocketType.Dealer, Connect("tcp://127.0.0.1:1234"), Listener(self), Identity("B".getBytes())) 15 | 16 | def receive = { 17 | case m: ZMQMessage => 18 | var mesg = new String(m.payload(0)) 19 | subSocket.tell((new ZMQMessage(Frame(mesg 20 | + " - Workload Processed by B")))) 21 | } 22 | } -------------------------------------------------------------------------------- /WordCountMapReduce/src/main/java/org/akka/essentials/wc/mapreduce/example/server/WCMapReduceActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.wc.mapreduce.example.server; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | 6 | public class WCMapReduceActor extends UntypedActor { 7 | 8 | private ActorRef mapRouter; 9 | private ActorRef aggregateActor; 10 | 11 | public void onReceive(Object message) { 12 | if (message instanceof String) { 13 | if (((String) message).compareTo("DISPLAY_LIST") == 0) { 14 | System.out.println("Got Display Message"); 15 | aggregateActor.tell(message, getSender()); 16 | } else { 17 | mapRouter.tell(message); 18 | } 19 | } 20 | } 21 | 22 | public WCMapReduceActor(ActorRef inAggregateActor, ActorRef inMapRouter) { 23 | 24 | mapRouter = inMapRouter; 25 | aggregateActor = inAggregateActor; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example/random/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example.random; 2 | 3 | import org.akka.essentials.java.router.example.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.RandomRouter; 9 | 10 | public class Example { 11 | 12 | /** 13 | * @param args 14 | * @throws InterruptedException 15 | */ 16 | public static void main(String[] args) throws InterruptedException { 17 | ActorSystem _system = ActorSystem.create("RandomRouterExample"); 18 | ActorRef randomRouter = _system.actorOf(new Props(MsgEchoActor.class) 19 | .withRouter(new RandomRouter(5)),"myRandomRouterActor"); 20 | 21 | for (int i = 1; i <= 10; i++) { 22 | //sends randomly to actors 23 | randomRouter.tell(i); 24 | } 25 | _system.shutdown(); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/java/org/akka/essentials/custom/extension/example/MySQLJDBCSettingsImpl.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example; 2 | 3 | import akka.actor.Extension; 4 | 5 | import com.typesafe.config.Config; 6 | 7 | public class MySQLJDBCSettingsImpl implements Extension { 8 | 9 | public final String DB_URL; 10 | public final String DB_NAME; 11 | public final String DB_DRIVER; 12 | public final String DB_USER_NAME; 13 | public final String DB_USER_PASSWORD; 14 | 15 | public MySQLJDBCSettingsImpl(Config config) { 16 | DB_URL = config.getString("connection.db.mysql.url"); 17 | DB_NAME = config.getString("connection.db.mysql.dbname"); 18 | DB_DRIVER = config.getString("connection.db.mysql.driver"); 19 | DB_USER_NAME = config.getString("connection.db.mysql.username"); 20 | DB_USER_PASSWORD = config.getString("connection.db.mysql.userpassword"); 21 | } 22 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/stockticker/example/StockUpdater.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.stockticker.example; 2 | 3 | import akka.japi.Function; 4 | 5 | public class StockUpdater implements Runnable { 6 | 7 | private int countDown = 5; 8 | private Stock stock; 9 | 10 | public StockUpdater(Stock inStock) { 11 | stock = inStock; 12 | } 13 | 14 | public void run() { 15 | while (countDown > 0) { 16 | try { 17 | Thread.sleep(75); 18 | } catch (InterruptedException e) { 19 | } 20 | String x = Thread.currentThread().getName(); 21 | stock.getPrice().send(new Function() { 22 | public Float apply(Float i) { 23 | return i + 10; 24 | } 25 | }); 26 | System.out.println("Quote update by thread (" + x 27 | + "), current price " + stock.getPrice().get()); 28 | countDown = countDown - 1; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /DurableMailBox/src/main/scala/org/akka/essentials/durable/mailbox/example/DurableMailBox.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.durable.mailbox.example 2 | import com.typesafe.config.ConfigFactory 3 | 4 | import akka.actor.actorRef2Scala 5 | import akka.actor.Actor 6 | import akka.actor.ActorSystem 7 | import akka.actor.Props 8 | 9 | object DurableMailBox { 10 | 11 | class DurableMailBox extends Actor { 12 | def receive: Receive = { 13 | case message:String => System.out.println("Received Message " + message) 14 | } 15 | } 16 | 17 | def main(args: Array[String]): Unit = { 18 | 19 | val system = ActorSystem("DurableMailBox", ConfigFactory.load() 20 | .getConfig("myapp1")) 21 | 22 | val actor = system.actorOf(Props[DurableMailBox].withDispatcher("my-dispatcher"), name = "serverActor") 23 | 24 | actor ! "Hello" 25 | 26 | Thread.sleep(500) 27 | 28 | system.shutdown 29 | } 30 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/transactor/example2/AccountActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.transactor.example2 2 | 3 | import scala.concurrent.stm.Ref 4 | 5 | import akka.actor.actorRef2Scala 6 | import akka.transactor.Transactor 7 | 8 | class AccountActor(accountNumber: String, inBalance: Float) extends Transactor { 9 | 10 | val balance = Ref(inBalance) 11 | 12 | def atomically = implicit txn => { 13 | case message: AccountDebit => 14 | if (balance.single.get < message.amount) 15 | throw new IllegalStateException("Insufficient Balance") 16 | else 17 | balance transform (_ - message.amount) 18 | case message: AccountCredit => 19 | balance transform (_ + message.amount) 20 | } 21 | 22 | override def normally: Receive = { 23 | case value: AccountBalance => 24 | sender ! new AccountBalance(accountNumber, balance.single.get) 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/java/org/akka/essentials/java/dispatcher/example/Dispatcher/Example1.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.dispatcher.example.Dispatcher; 2 | 3 | import org.akka.essentials.java.dispatcher.MsgEchoActor; 4 | 5 | import com.typesafe.config.ConfigFactory; 6 | 7 | import akka.actor.ActorRef; 8 | import akka.actor.ActorSystem; 9 | import akka.actor.Props; 10 | import akka.routing.RoundRobinRouter; 11 | 12 | /** 13 | * Hello world! 14 | * 15 | */ 16 | public class Example1 { 17 | public static void main(String[] args) { 18 | ActorSystem _system = ActorSystem.create("default-dispatcher", 19 | ConfigFactory.load().getConfig("MyDispatcherExample")); 20 | 21 | ActorRef actor = _system.actorOf(new Props(MsgEchoActor.class) 22 | .withDispatcher("defaultDispatcher").withRouter( 23 | new RoundRobinRouter(5))); 24 | 25 | for (int i = 0; i < 25; i++) { 26 | actor.tell(i); 27 | } 28 | 29 | _system.shutdown(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ClientServerExample/src/main/java/org/akka/essentials/clientserver/sample/ClientActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.clientserver.sample; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.event.Logging; 6 | import akka.event.LoggingAdapter; 7 | 8 | public class ClientActor extends UntypedActor { 9 | 10 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 11 | private ActorRef remote; 12 | 13 | public ClientActor(ActorRef inActor) { 14 | remote = inActor; 15 | } 16 | 17 | @Override 18 | public void onReceive(Object message) throws Exception { 19 | 20 | if (message instanceof String) { 21 | if (((String) message).startsWith("Start") == true) { 22 | log.info("Sending message to server - message# Hi there"); 23 | remote.tell("Hi there", getSelf()); 24 | } else { 25 | log.info("Message received from Server -> " + message); 26 | } 27 | } 28 | 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/java/org/akka/essentials/java/dispatcher/example/Dispatcher/Example2.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.dispatcher.example.Dispatcher; 2 | 3 | import org.akka.essentials.java.dispatcher.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.RoundRobinRouter; 9 | 10 | import com.typesafe.config.ConfigFactory; 11 | 12 | public class Example2 { 13 | 14 | /** 15 | * @param args 16 | */ 17 | public static void main(String[] args) { 18 | ActorSystem _system = ActorSystem.create("default-dispatcher", 19 | ConfigFactory.load().getConfig("MyDispatcherExample")); 20 | 21 | ActorRef actor = _system.actorOf(new Props(MsgEchoActor.class) 22 | .withDispatcher("defaultDispatcher1").withRouter( 23 | new RoundRobinRouter(5))); 24 | 25 | for (int i = 0; i < 25; i++) { 26 | actor.tell(i); 27 | } 28 | 29 | _system.shutdown(); 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example3/MonitorActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3 2 | import scala.collection.immutable.HashMap 3 | 4 | import akka.actor.Actor 5 | import akka.actor.ActorLogging 6 | import akka.actor.ActorRef 7 | import akka.actor.Terminated 8 | 9 | class MonitorActor extends Actor with ActorLogging { 10 | 11 | var monitoredActors = new HashMap[ActorRef, ActorRef] 12 | 13 | def receive: Receive = { 14 | case t: Terminated => 15 | if (monitoredActors.contains(t.actor)) { 16 | log.info("Received Worker Actor Termination Message -> " 17 | + t.actor.path) 18 | log.info("Sending message to Supervisor") 19 | val value: Option[ActorRef] = monitoredActors.get(t.actor) 20 | value.get ! new DeadWorker() 21 | } 22 | 23 | case msg: RegisterWorker => 24 | context.watch(msg.worker) 25 | monitoredActors += msg.worker -> msg.supervisor 26 | } 27 | } -------------------------------------------------------------------------------- /AkkaRemotingExample/LocalNodeApp/src/main/scala/org/akka/essentials/localnode/LocalActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.localnode 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.actor.Address 5 | import akka.actor.Deploy 6 | import akka.actor.Props 7 | import akka.dispatch.Await 8 | import akka.pattern.ask 9 | import akka.remote.RemoteScope 10 | import akka.util.duration.intToDurationInt 11 | import akka.util.Timeout 12 | 13 | class LocalActor extends Actor with ActorLogging { 14 | 15 | //Get a reference to the remote actor 16 | val remoteActor = context.actorFor("akka://RemoteNodeApp@10.101.161.20:2552/user/remoteActor") 17 | implicit val timeout = Timeout(5 seconds) 18 | def receive: Receive = { 19 | case message: String => 20 | val future = (remoteActor ? message).mapTo[String] 21 | val result = Await.result(future, timeout.duration) 22 | log.info("Message received from Server -> {}", result) 23 | } 24 | } -------------------------------------------------------------------------------- /TypedActorExample/src/main/java/org/akka/essentials/calculator/example3/ChildActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.calculator.example3; 2 | 3 | import akka.actor.UntypedActor; 4 | import akka.event.Logging; 5 | import akka.event.LoggingAdapter; 6 | 7 | public class ChildActor extends UntypedActor { 8 | 9 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 10 | 11 | public void preStart() { 12 | log.info("Child Actor Started > {}", self().path()); 13 | } 14 | 15 | @Override 16 | public void onReceive(Object message) throws Exception { 17 | 18 | if (message instanceof String) { 19 | throw new IllegalArgumentException("boom!"); 20 | } else if (message instanceof Integer) { 21 | Integer value = (Integer) message; 22 | getSender().tell(value * value); 23 | } else 24 | unhandled(message); 25 | 26 | } 27 | 28 | public void postStop() { 29 | log.info("Child Actor Stopped > {}", self().path()); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/java/org/akka/essentials/java/dispatcher/example/BalancingDispatcher/Example1.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.dispatcher.example.BalancingDispatcher; 2 | 3 | import org.akka.essentials.java.dispatcher.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.RoundRobinRouter; 9 | 10 | import com.typesafe.config.ConfigFactory; 11 | 12 | public class Example1 { 13 | /** 14 | * @param args 15 | */ 16 | public static void main(String[] args) { 17 | ActorSystem _system = ActorSystem.create("balancing-dispatcher", 18 | ConfigFactory.load().getConfig("MyDispatcherExample")); 19 | 20 | ActorRef actor = _system.actorOf(new Props(MsgEchoActor.class) 21 | .withDispatcher("balancingDispatcher").withRouter( 22 | new RoundRobinRouter(5))); 23 | 24 | for (int i = 0; i < 25; i++) { 25 | actor.tell(i); 26 | } 27 | 28 | _system.shutdown(); 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/java/org/akka/essentials/java/dispatcher/example/BalancingDispatcher/Example2.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.dispatcher.example.BalancingDispatcher; 2 | 3 | import org.akka.essentials.java.dispatcher.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.RoundRobinRouter; 9 | 10 | import com.typesafe.config.ConfigFactory; 11 | 12 | public class Example2 { 13 | /** 14 | * @param args 15 | */ 16 | public static void main(String[] args) { 17 | ActorSystem _system = ActorSystem.create("balancing-dispatcher", 18 | ConfigFactory.load().getConfig("MyDispatcherExample")); 19 | 20 | ActorRef actor = _system.actorOf(new Props(MsgEchoActor.class) 21 | .withDispatcher("balancingDispatcher1").withRouter( 22 | new RoundRobinRouter(5))); 23 | 24 | for (int i = 0; i < 25; i++) { 25 | actor.tell(i); 26 | } 27 | 28 | _system.shutdown(); 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/java/org/akka/essentials/java/dispatcher/example/PinnedDispatcher/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.dispatcher.example.PinnedDispatcher; 2 | 3 | import org.akka.essentials.java.dispatcher.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.RoundRobinRouter; 9 | 10 | import com.typesafe.config.ConfigFactory; 11 | 12 | public class Example { 13 | 14 | /** 15 | * @param args 16 | */ 17 | public static void main(String[] args) { 18 | ActorSystem _system = ActorSystem.create("pinned-dispatcher", 19 | ConfigFactory.load().getConfig("MyDispatcherExample")); 20 | 21 | ActorRef actor = _system.actorOf(new Props(MsgEchoActor.class) 22 | .withDispatcher("pinnedDispatcher").withRouter( 23 | new RoundRobinRouter(5))); 24 | 25 | for (int i = 0; i < 25; i++) { 26 | actor.tell(i); 27 | } 28 | 29 | _system.shutdown(); 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example/smallestmailbox/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example.smallestmailbox; 2 | 3 | import org.akka.essentials.java.router.example.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.SmallestMailboxRouter; 9 | 10 | public class Example { 11 | 12 | /** 13 | * @param args 14 | */ 15 | public static void main(String[] args) { 16 | ActorSystem _system = ActorSystem.create("SmallestMailBoxRouterExample"); 17 | ActorRef smallestMailBoxRouter = _system.actorOf(new Props(MsgEchoActor.class) 18 | .withRouter(new SmallestMailboxRouter(5)),"mySmallestMailBoxRouterActor"); 19 | 20 | for (int i = 1; i <= 10; i++) { 21 | //works like roundrobin but tries to rebalance the load based on 22 | //size of actor's mailbox 23 | smallestMailBoxRouter.tell(i); 24 | } 25 | _system.shutdown(); 26 | 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /AkkaCustomExtension/src/main/java/org/akka/essentials/custom/extension/example/TestApp.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.custom.extension.example; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | 7 | import com.typesafe.config.ConfigFactory; 8 | 9 | public class TestApp { 10 | 11 | public TestApp() { 12 | 13 | ActorSystem _system = ActorSystem.create("Extension-Test", 14 | ConfigFactory.load().getConfig("TestApp")); 15 | 16 | ActorRef ref = _system.actorOf(new Props(MyActor.class)); 17 | 18 | ref.tell("msg"); 19 | 20 | MySQLJDBCSettingsImpl mysqlSetting = MySQLJDBCSettings.SettingsProvider 21 | .get(_system); 22 | 23 | System.out.println(mysqlSetting.DB_NAME); 24 | System.out.println(mysqlSetting.DB_URL); 25 | 26 | _system.shutdown(); 27 | } 28 | 29 | /** 30 | * @param args 31 | */ 32 | public static void main(String[] args) { 33 | new TestApp(); 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /AkkaSerializerExample/src/main/java/org/akka/essentials/serializer/MyMessage.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.serializer; 2 | 3 | public class MyMessage { 4 | 5 | private String name; 6 | private Integer age; 7 | private String address; 8 | 9 | public MyMessage(String _name, Integer _age, String _address) { 10 | name = _name; 11 | age = _age; 12 | address = _address; 13 | } 14 | 15 | public String getName() { 16 | return name; 17 | } 18 | 19 | public void setName(String name) { 20 | this.name = name; 21 | } 22 | 23 | public Integer getAge() { 24 | return age; 25 | } 26 | 27 | public void setAge(Integer age) { 28 | this.age = age; 29 | } 30 | 31 | public String getAddress() { 32 | return address; 33 | } 34 | 35 | public void setAddress(String address) { 36 | this.address = address; 37 | } 38 | 39 | public String toString() { 40 | return new StringBuffer().append(name).append(",").append(age) 41 | .append(",").append(address).toString(); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /AkkaDispatcherExample/src/main/java/org/akka/essentials/java/dispatcher/example/CallingThreadDispatcher/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.dispatcher.example.CallingThreadDispatcher; 2 | 3 | import org.akka.essentials.java.dispatcher.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.RoundRobinRouter; 9 | 10 | import com.typesafe.config.ConfigFactory; 11 | 12 | public class Example { 13 | /** 14 | * @param args 15 | */ 16 | public static void main(String[] args) { 17 | ActorSystem _system = ActorSystem.create("callingThread-dispatcher", 18 | ConfigFactory.load().getConfig("MyDispatcherExample")); 19 | 20 | ActorRef actor = _system.actorOf(new Props(MsgEchoActor.class) 21 | .withDispatcher("CallingThreadDispatcher").withRouter( 22 | new RoundRobinRouter(2))); 23 | 24 | for (int i = 0; i < 5; i++) { 25 | actor.tell(i); 26 | } 27 | 28 | _system.shutdown(); 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /GridPatternExample/src/main/java/org/akka/essentials/grid/controller/RegisterRemoteWorkerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid.controller; 2 | 3 | import org.akka.essentials.grid.StartWorker; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.UntypedActor; 7 | import akka.event.Logging; 8 | import akka.event.LoggingAdapter; 9 | 10 | public class RegisterRemoteWorkerActor extends UntypedActor { 11 | 12 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 13 | private ActorRef jobControllerActor; 14 | 15 | @Override 16 | public void onReceive(Object message) throws Exception { 17 | if (message instanceof StartWorker) { 18 | log.info("Recieved Registration Info from " + message.toString()); 19 | jobControllerActor.tell(message); 20 | } else 21 | log.error("Wrong message type recieved"); 22 | } 23 | 24 | public RegisterRemoteWorkerActor(ActorRef inJobControllerActor) { 25 | jobControllerActor = inJobControllerActor; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /WordCountMapReduce/src/main/java/org/akka/essentials/wc/mapreduce/example/server/Result.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.wc.mapreduce.example.server; 2 | 3 | import java.io.Serializable; 4 | 5 | public class Result implements Serializable{ 6 | /** 7 | * 8 | */ 9 | private static final long serialVersionUID = 5727560172917790458L; 10 | private String word; 11 | private int no_of_instances; 12 | 13 | public Result(String word, int no_of_instances){ 14 | this.setWord(word); 15 | this.setNoOfInstances(no_of_instances); 16 | } 17 | 18 | public void setWord(String word) { 19 | this.word = word; 20 | } 21 | 22 | public String getWord() { 23 | return word; 24 | } 25 | 26 | public void setNoOfInstances(int no_of_instances) { 27 | this.no_of_instances = no_of_instances; 28 | } 29 | 30 | public int getNoOfInstances() { 31 | return no_of_instances; 32 | } 33 | 34 | public String toString(){ 35 | return word + ":" + no_of_instances; 36 | } 37 | 38 | } -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/java/akka/first/app/java/MapReduceApplication.java: -------------------------------------------------------------------------------- 1 | package akka.first.app.java; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | import akka.first.app.java.actors.MasterActor; 7 | import akka.first.app.java.messages.Result; 8 | 9 | public class MapReduceApplication { 10 | 11 | public static void main(String[] args) throws Exception { 12 | 13 | ActorSystem _system = ActorSystem.create("MapReduceApp"); 14 | 15 | ActorRef master = _system.actorOf(new Props(MasterActor.class),"master"); 16 | 17 | master.tell("The quick brown fox tried to jump over the lazy dog and fell on the dog"); 18 | master.tell("Dog is man's best friend"); 19 | master.tell("Dog and Fox belong to the same family"); 20 | 21 | Thread.sleep(500); 22 | 23 | master.tell(new Result(), null); 24 | 25 | Thread.sleep(500); 26 | 27 | _system.shutdown(); 28 | System.out.println("Java done!"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example2/config/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example2.config; 2 | 3 | import org.akka.essentials.java.router.example.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.FromConfig; 9 | 10 | import com.typesafe.config.ConfigFactory; 11 | 12 | public class Example { 13 | /** 14 | * @param args 15 | * @throws InterruptedException 16 | */ 17 | public static void main(String[] args) throws InterruptedException { 18 | ActorSystem _system = ActorSystem.create("RandomRouterExample", 19 | ConfigFactory.load().getConfig("MyRouterExample")); 20 | ActorRef randomRouter = _system.actorOf( 21 | new Props(MsgEchoActor.class).withRouter(new FromConfig()), 22 | "myRandomRouterActor"); 23 | 24 | for (int i = 1; i <= 10; i++) { 25 | // sends randomly to actors 26 | randomRouter.tell(i); 27 | } 28 | _system.shutdown(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/scala/akka/first/app/scala/actors/AggregateActor.scala: -------------------------------------------------------------------------------- 1 | package akka.first.app.scala.actors 2 | 3 | import scala.collection.immutable._ 4 | 5 | import akka.actor.Actor 6 | import akka.first.app.scala.ReduceData 7 | import akka.first.app.scala.Result 8 | 9 | class AggregateActor extends Actor { 10 | 11 | var finalReducedMap = new HashMap[String, Int] 12 | 13 | def receive: Receive = { 14 | case message: ReduceData => 15 | aggregateInMemoryReduce(message.reduceDataMap) 16 | case message: Result => 17 | println(finalReducedMap.toString()) 18 | } 19 | 20 | def aggregateInMemoryReduce(reducedMap: Map[String, Int]) { 21 | var count: Int = 0 22 | reducedMap.foreach((entry: (String, Int)) => 23 | if (finalReducedMap.contains(entry._1)) { 24 | count = entry._2 + finalReducedMap.get(entry._1).get 25 | finalReducedMap += entry._1 -> count 26 | } else 27 | finalReducedMap += entry._1 -> entry._2) 28 | } 29 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example3/server/ServerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example3.server; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.zeromq.Bind; 6 | import akka.zeromq.Frame; 7 | import akka.zeromq.Listener; 8 | import akka.zeromq.SocketOption; 9 | import akka.zeromq.ZMQMessage; 10 | import akka.zeromq.ZeroMQExtension; 11 | 12 | public class ServerActor extends UntypedActor { 13 | ActorRef repSocket = ZeroMQExtension.get(getContext().system()) 14 | .newRepSocket( 15 | new SocketOption[] { new Bind("tcp://127.0.0.1:1237"), 16 | new Listener(getSelf()) }); 17 | 18 | @Override 19 | public void onReceive(Object message) throws Exception { 20 | if (message instanceof ZMQMessage) { 21 | ZMQMessage m = (ZMQMessage) message; 22 | String mesg = new String(m.payload(0)); 23 | 24 | repSocket.tell((new ZMQMessage( 25 | new Frame(mesg + " Good to see you!")))); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example2/custom/Example1.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example2.custom 2 | import org.akka.essentials.scala.router.example.MsgEchoActor 3 | import akka.actor.ActorSystem 4 | import akka.actor.Props 5 | import akka.actor.ActorRef 6 | import akka.routing.FromConfig 7 | import akka.routing.RoundRobinRouter 8 | import akka.routing.RandomRouter 9 | 10 | object Example1 { 11 | 12 | def main(args: Array[String]): Unit = { 13 | val _system = ActorSystem.create("CustomRouteeRouterExample") 14 | 15 | val echoActor1 = _system.actorOf(Props[MsgEchoActor]) 16 | val echoActor2 = _system.actorOf(Props[MsgEchoActor]) 17 | val echoActor3 = _system.actorOf(Props[MsgEchoActor]) 18 | 19 | val routees = Vector[ActorRef](echoActor1, echoActor2, echoActor3) 20 | 21 | val randomRouter = _system.actorOf(Props[MsgEchoActor].withRouter(RandomRouter(routees = routees))) 22 | 1 to 10 foreach { 23 | i => randomRouter ! i 24 | } 25 | _system.shutdown() 26 | } 27 | } -------------------------------------------------------------------------------- /LoadGeneratorExample/src/main/java/org/akka/essentials/loadgenerator/JobControllerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.loadgenerator; 2 | 3 | 4 | import akka.actor.UntypedActor; 5 | 6 | public class JobControllerActor extends UntypedActor { 7 | 8 | int count = 0; 9 | long startedTime = System.currentTimeMillis(); 10 | int no_of_msgs = 0; 11 | 12 | @Override 13 | public void onReceive(Object message) throws Exception { 14 | 15 | if (message instanceof String) { 16 | if (((String) message).compareTo("Done") == 0) { 17 | count++; 18 | if (count == no_of_msgs) { 19 | long now = System.currentTimeMillis(); 20 | System.out.println("All messages processed in " 21 | + (now - startedTime) / 1000 + " seconds"); 22 | 23 | System.out.println("Total Number of messages processed " 24 | + count); 25 | getContext().system().shutdown(); 26 | } 27 | } 28 | } 29 | 30 | } 31 | 32 | public JobControllerActor(int no_of_msgs) { 33 | this.no_of_msgs = no_of_msgs; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /AkkaPersistentExample/src/main/java/org/akka/essentials/actor/SnapshotExample.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.actor; 2 | 3 | import org.akka.essentials.data.OperationCmd; 4 | import org.akka.essentials.data.Operator; 5 | 6 | import akka.actor.ActorRef; 7 | import akka.actor.ActorSystem; 8 | import akka.actor.Props; 9 | 10 | public class SnapshotExample { 11 | 12 | public static void main(String... args) throws Exception { 13 | final ActorSystem system = ActorSystem.create(); 14 | 15 | final ActorRef calculationActor = system.actorOf( 16 | Props.create(CalculationActor.class), "calculationActor-java"); 17 | 18 | calculationActor.tell(new OperationCmd(Operator.ADD, 5), null); 19 | calculationActor.tell(new OperationCmd(Operator.ADD, 7), null); 20 | calculationActor.tell("snap", null); 21 | calculationActor.tell(new OperationCmd(Operator.SUBTRACT, 6), null); 22 | calculationActor.tell(new OperationCmd(Operator.MULTIPLY, 3), null); 23 | calculationActor.tell("print", null); 24 | 25 | Thread.sleep(1000); 26 | system.shutdown(); 27 | } 28 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example3/Game.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example3; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.agent.Agent; 5 | 6 | public class Game { 7 | public static void main(String args[]) { 8 | 9 | ActorSystem _system = ActorSystem.create("Agent-example"); 10 | Agent turn = new Agent("", _system); 11 | PingPong table = new PingPong(turn); 12 | 13 | Thread alice = new Thread(new Player("bob", table)); 14 | Thread bob = new Thread(new Player("alice", table)); 15 | 16 | alice.setName("alice"); 17 | bob.setName("bob"); 18 | alice.start(); // alice starts playing 19 | bob.start(); // bob starts playing 20 | try { 21 | // Wait 5 seconds 22 | Thread.sleep(5000); 23 | } catch (InterruptedException e) { 24 | } 25 | 26 | table.hit("DONE"); // cause the players to quit their threads. 27 | try { 28 | Thread.sleep(500); 29 | } catch (InterruptedException e) { 30 | } 31 | _system.shutdown(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/scala/akka/first/app/scala/MapReduceApplication.scala: -------------------------------------------------------------------------------- 1 | package akka.first.app.scala 2 | 3 | import scala.collection.immutable._ 4 | 5 | import akka.actor.ActorSystem 6 | import akka.actor.Props 7 | import akka.actor.actorRef2Scala 8 | import akka.first.app.scala.actors.MasterActor 9 | 10 | class Word(val word:String,val count:Int) 11 | case class Result() 12 | class MapData(val dataList: List[Word]) 13 | class ReduceData(val reduceDataMap: Map[String, Int]) 14 | 15 | 16 | object MapReduceApplication { 17 | 18 | def main(args: Array[String]) { 19 | val _system = ActorSystem("MapReduceApp") 20 | val master = _system.actorOf(Props[MasterActor], name = "master") 21 | 22 | master ! "The quick brown fox tried to jump over the lazy dog and fell on the dog" 23 | master ! "Dog is man's best friend" 24 | master ! "Dog and Fox belong to the same family" 25 | 26 | Thread.sleep(500) 27 | master ! new Result 28 | 29 | Thread.sleep(500) 30 | _system.shutdown 31 | println("Scala done!") 32 | } 33 | } -------------------------------------------------------------------------------- /TypedActorExample/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | TypedActorExample 6 | TypedActorExample 7 | 0.0.1-SNAPSHOT 8 | jar 9 | 10 | TypedActorExample 11 | http://maven.apache.org 12 | 13 | 14 | UTF-8 15 | 16 | 17 | 18 | 19 | com.typesafe.akka 20 | akka-actor 21 | 2.0.1 22 | 23 | 24 | 25 | 26 | typesafe 27 | Typesafe Repository 28 | http://repo.typesafe.com/typesafe/releases/ 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /AkkaCustomExtension/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | AkkaCustomExtension 6 | AkkaCustomExtension 7 | 0.0.1-SNAPSHOT 8 | jar 9 | 10 | AkkaCustomExtension 11 | http://maven.apache.org 12 | 13 | 14 | UTF-8 15 | 16 | 17 | 18 | 19 | com.typesafe.akka 20 | akka-actor_2.10 21 | 2.1.2 22 | 23 | 24 | 25 | 26 | typesafe 27 | Typesafe Repository 28 | http://repo.typesafe.com/typesafe/releases/ 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example1/PublisherActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.util.duration._ 5 | import akka.zeromq.Bind 6 | import akka.zeromq.SocketType 7 | import akka.zeromq.ZeroMQExtension 8 | import akka.zeromq._ 9 | import akka.actor.Cancellable 10 | 11 | case class Tick 12 | 13 | class PublisherActor extends Actor with ActorLogging { 14 | val pubSocket = ZeroMQExtension(context.system).newSocket(SocketType.Pub, Bind("tcp://127.0.0.1:1234")) 15 | var count = 0 16 | var cancellable:Cancellable = null 17 | override def preStart() { 18 | cancellable = context.system.scheduler.schedule(1 second, 1 second, self, Tick) 19 | } 20 | def receive: Receive = { 21 | case Tick => 22 | count += 1 23 | var payload = "This is the workload " + count; 24 | pubSocket ! ZMQMessage(Seq(Frame("someTopic"), Frame(payload))) 25 | if(count == 10){ 26 | cancellable.cancel() 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example2/custom/Example3.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example2.custom; 2 | 3 | import org.akka.essentials.java.router.example.MsgEchoActor; 4 | 5 | import akka.actor.ActorRef; 6 | import akka.actor.ActorSystem; 7 | import akka.actor.Props; 8 | import akka.routing.DefaultResizer; 9 | import akka.routing.RandomRouter; 10 | 11 | public class Example3 { 12 | 13 | /** 14 | * @param args 15 | * @throws InterruptedException 16 | */ 17 | public static void main(String[] args) throws InterruptedException { 18 | ActorSystem _system = ActorSystem.create("CustomRouteeRouterExample"); 19 | 20 | int lowerBound = 2; 21 | int upperBound = 15; 22 | DefaultResizer resizer = new DefaultResizer(lowerBound, upperBound); 23 | 24 | ActorRef randomRouter = _system.actorOf(new Props(MsgEchoActor.class) 25 | .withRouter(new RandomRouter(resizer))); 26 | 27 | for (int i = 1; i <= 10; i++) { 28 | // sends randomly to actors 29 | randomRouter.tell(i); 30 | } 31 | _system.shutdown(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example1/WorkerTaskA.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.event.Logging; 6 | import akka.event.LoggingAdapter; 7 | import akka.zeromq.Connect; 8 | import akka.zeromq.Listener; 9 | import akka.zeromq.Subscribe; 10 | import akka.zeromq.ZMQMessage; 11 | import akka.zeromq.ZeroMQExtension; 12 | 13 | public class WorkerTaskA extends UntypedActor { 14 | ActorRef subSocket = ZeroMQExtension.get(getContext().system()) 15 | .newSubSocket(new Connect("tcp://127.0.0.1:1237"), 16 | new Listener(getSelf()), new Subscribe("someTopic")); 17 | 18 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 19 | 20 | @Override 21 | public void onReceive(Object message) throws Exception { 22 | 23 | if (message instanceof ZMQMessage) { 24 | ZMQMessage m = (ZMQMessage) message; 25 | String mesg = new String(m.payload(1)); 26 | log.info("Received Message @ A -> {}",mesg); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example3/WorkerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3; 2 | 3 | import akka.actor.UntypedActor; 4 | import akka.event.Logging; 5 | import akka.event.LoggingAdapter; 6 | 7 | public class WorkerActor extends UntypedActor { 8 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 9 | private int state = 0; 10 | 11 | @Override 12 | public void preStart() { 13 | log.info("Starting WorkerActor instance hashcode # {}", this.hashCode()); 14 | } 15 | 16 | public void onReceive(Object o) throws Exception { 17 | if (o instanceof Integer) { 18 | Integer value = (Integer) o; 19 | state = value; 20 | log.info("Received a message " + value); 21 | } else if (o instanceof Result) { 22 | getSender().tell(state); 23 | } else { 24 | throw new IllegalArgumentException("Wrong Argument"); 25 | } 26 | } 27 | 28 | @Override 29 | public void postStop() { 30 | log.info("Stopping WorkerActor instance hashcode # {}", this.hashCode()); 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example1/WorkerTaskB.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.event.Logging; 6 | import akka.event.LoggingAdapter; 7 | import akka.zeromq.Connect; 8 | import akka.zeromq.Listener; 9 | import akka.zeromq.Subscribe; 10 | import akka.zeromq.ZMQMessage; 11 | import akka.zeromq.ZeroMQExtension; 12 | 13 | public class WorkerTaskB extends UntypedActor { 14 | ActorRef subSocket = ZeroMQExtension.get(getContext().system()) 15 | .newSubSocket(new Connect("tcp://127.0.0.1:1237"), 16 | new Listener(getSelf()), new Subscribe("someTopic")); 17 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 18 | 19 | @Override 20 | public void onReceive(Object message) throws Exception { 21 | 22 | if (message instanceof ZMQMessage) { 23 | ZMQMessage m = (ZMQMessage) message; 24 | String mesg = new String(m.payload(1)); 25 | log.info("Received Message @ B -> {}", mesg); 26 | } 27 | 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /DurableMailBox/src/main/java/org/akka/essentails/durable/mailbox/example/DurableMailBox.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentails.durable.mailbox.example; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | import akka.actor.UntypedActor; 7 | 8 | import com.typesafe.config.ConfigFactory; 9 | 10 | public class DurableMailBox extends UntypedActor { 11 | 12 | /** 13 | * @param args 14 | * @throws Exception 15 | */ 16 | public static void main(String[] args) throws Exception { 17 | // TODO Auto-generated method stub 18 | ActorSystem system = ActorSystem.create("DurableMailBox", ConfigFactory 19 | .load().getConfig("myapp1")); 20 | 21 | ActorRef actor = system 22 | .actorOf(new Props(DurableMailBox.class) 23 | .withDispatcher("my-dispatcher"), "serverActor"); 24 | 25 | actor.tell("Hello"); 26 | 27 | Thread.sleep(500); 28 | 29 | system.shutdown(); 30 | 31 | } 32 | 33 | @Override 34 | public void onReceive(Object message) throws Exception { 35 | System.out.println("Received message " + message); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example4/PullActor1.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.event.Logging; 6 | import akka.event.LoggingAdapter; 7 | import akka.zeromq.Connect; 8 | import akka.zeromq.Listener; 9 | import akka.zeromq.SocketOption; 10 | import akka.zeromq.ZMQMessage; 11 | import akka.zeromq.ZeroMQExtension; 12 | 13 | public class PullActor1 extends UntypedActor { 14 | ActorRef pullSocket = ZeroMQExtension.get(getContext().system()) 15 | .newPullSocket( 16 | new SocketOption[] { new Connect("tcp://127.0.0.1:1237"), 17 | new Listener(getSelf()) }); 18 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 19 | 20 | @Override 21 | public void onReceive(Object message) throws Exception { 22 | 23 | if (message instanceof ZMQMessage) { 24 | ZMQMessage m = (ZMQMessage) message; 25 | String mesg = new String(m.payload(0)); 26 | log.info("Received Message -> {}", mesg); 27 | } 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example2/Game.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example2; 2 | 3 | import akka.actor.ActorSystem; 4 | import scala.concurrent.stm.Ref; 5 | import scala.concurrent.stm.japi.STM; 6 | 7 | public class Game { 8 | public static void main(String args[]) { 9 | 10 | ActorSystem _system = ActorSystem.create("Agent-example"); 11 | Ref.View turn = STM.newRef(""); 12 | PingPong table = new PingPong(turn); 13 | 14 | Thread alice = new Thread(new Player("bob", table)); 15 | Thread bob = new Thread(new Player("alice", table)); 16 | 17 | alice.setName("alice"); 18 | bob.setName("bob"); 19 | alice.start(); // alice starts playing 20 | bob.start(); // bob starts playing 21 | try { 22 | // Wait 5 seconds 23 | Thread.sleep(5000); 24 | } catch (InterruptedException e) { 25 | } 26 | 27 | table.hit("DONE"); // cause the players to quit their threads. 28 | try { 29 | Thread.sleep(3000); 30 | } catch (InterruptedException e) { 31 | } 32 | _system.shutdown(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example4/PullActor2.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.event.Logging; 6 | import akka.event.LoggingAdapter; 7 | import akka.zeromq.Connect; 8 | import akka.zeromq.Listener; 9 | import akka.zeromq.SocketOption; 10 | import akka.zeromq.ZMQMessage; 11 | import akka.zeromq.ZeroMQExtension; 12 | 13 | public class PullActor2 extends UntypedActor { 14 | 15 | ActorRef pullSocket = ZeroMQExtension.get(getContext().system()) 16 | .newPullSocket( 17 | new SocketOption[] { new Connect("tcp://127.0.0.1:1237"), 18 | new Listener(getSelf()) }); 19 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 20 | 21 | @Override 22 | public void onReceive(Object message) throws Exception { 23 | 24 | if (message instanceof ZMQMessage) { 25 | ZMQMessage m = (ZMQMessage) message; 26 | String mesg = new String(m.payload(0)); 27 | log.info("Received Message -> {}",mesg); 28 | } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/pingpong/example2/Game.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.pingpong.example2 2 | 3 | import scala.concurrent.stm.Ref 4 | 5 | import akka.actor.ActorSystem 6 | 7 | object Game { 8 | 9 | def main(args: Array[String]): Unit = { 10 | 11 | val _system = ActorSystem("Ref-example") 12 | val turn = Ref(new String()) 13 | val table = new PingPong(turn) 14 | 15 | val alice = new Thread(new Player("bob", table)) 16 | val bob = new Thread(new Player("alice", table)) 17 | 18 | alice.setName("alice") 19 | bob.setName("bob") 20 | alice.start() // alice starts playing 21 | bob.start() // bob starts playing 22 | try { 23 | // Wait .5 seconds 24 | Thread.sleep(500) 25 | } catch { 26 | case _ : Throwable => 27 | // eat the exception 28 | } 29 | table.hit("DONE") // cause the players to quit their threads. 30 | try { 31 | Thread.sleep(1000) 32 | } catch { 33 | case _ : Throwable => 34 | // eat the exception 35 | } 36 | _system.shutdown 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/pingpong/example3/Game.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.pingpong.example3 2 | 3 | import akka.actor.ActorSystem 4 | import akka.agent.Agent 5 | 6 | object Game { 7 | 8 | def main(args: Array[String]): Unit = { 9 | 10 | val _system = ActorSystem("Agent-example") 11 | val turn = Agent(new String)(_system) 12 | val table = new PingPong(turn) 13 | 14 | val alice = new Thread(new Player("bob", table)) 15 | val bob = new Thread(new Player("alice", table)) 16 | 17 | alice.setName("alice") 18 | bob.setName("bob") 19 | 20 | alice.start() // alice starts playing 21 | bob.start() // bob starts playing 22 | try { 23 | // Wait .5 seconds 24 | Thread.sleep(500) 25 | } catch { 26 | case _ : Throwable => 27 | // eat the exception 28 | } 29 | table.hit("DONE") // cause the players to quit their threads. 30 | try { 31 | Thread.sleep(1000) 32 | } catch { 33 | case _: Throwable => 34 | // eat the exception 35 | } 36 | _system.shutdown 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example1/WorkerActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example1 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorLogging 5 | 6 | class WorkerActor extends Actor with ActorLogging { 7 | import org.akka.essentials.supervisor.example1.Result 8 | var state: Int = 0 9 | 10 | override def preStart() { 11 | log.info("Starting WorkerActor instance hashcode # {}", this.hashCode()) 12 | } 13 | override def postStop() { 14 | log.info("Stopping WorkerActor instance hashcode # {}", this.hashCode()) 15 | } 16 | def receive: Receive = { 17 | case value: Int => 18 | if (value <= 0) 19 | throw new ArithmeticException("Number equal or less than zero") 20 | else 21 | state = value 22 | case result: Result => 23 | sender ! state 24 | case ex: NullPointerException => 25 | throw new NullPointerException("Null Value Passed") 26 | case _ => 27 | throw new IllegalArgumentException("Wrong Arguement") 28 | } 29 | } -------------------------------------------------------------------------------- /GridPatternExample/src/main/scala/org/akka/essentials/grid/worker/WorkerActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid.worker 2 | import org.akka.essentials.grid.controller._ 3 | 4 | import com.typesafe.config.ConfigFactory 5 | 6 | import akka.actor.ActorSystem 7 | import akka.actor.Address 8 | 9 | object WorkerActorSystem { 10 | 11 | def main(args: Array[String]): Unit = { 12 | val argsList = args.toList 13 | 14 | // load the configuration 15 | val config = ConfigFactory.load().getConfig(argsList.first) 16 | val system = ActorSystem("WorkerSys", config) 17 | 18 | // get the reference to the remote server actor 19 | val registerRemoteWorkerActor = system 20 | .actorFor("akka://WorkServerSys@127.0.0.1:2552/user/RegisterRemoteWorkerActor"); 21 | 22 | // create the worker address message 23 | val myAddr = new Address("akka", "WorkerSys", "127.0.0.1", Integer.parseInt(argsList.last)); 24 | 25 | // send a message to server to register this worker instance 26 | registerRemoteWorkerActor.tell(new StartWorker(myAddr.toString)); 27 | } 28 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example2/WorkerActor1.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example2 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorLogging 5 | 6 | class WorkerActor1 extends Actor with ActorLogging { 7 | import org.akka.essentials.supervisor.example2.Result 8 | 9 | var state: Int = 0 10 | 11 | override def preStart() { 12 | log.info("Starting WorkerActor instance hashcode # {}", this.hashCode()) 13 | } 14 | override def postStop() { 15 | log.info("Stopping WorkerActor instance hashcode # {}", this.hashCode()) 16 | } 17 | def receive: Receive = { 18 | case value: Int => 19 | if (value <= 0) 20 | throw new ArithmeticException("Number equal or less than zero") 21 | else 22 | state = value 23 | case result: Result => 24 | sender ! state 25 | case ex: NullPointerException => 26 | throw new NullPointerException("Null Value Passed") 27 | case _ => 28 | throw new IllegalArgumentException("Wrong Argument") 29 | } 30 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example2/WorkerActor2.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example2 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorLogging 5 | 6 | class WorkerActor2 extends Actor with ActorLogging { 7 | import org.akka.essentials.supervisor.example2.Result 8 | 9 | var state: Int = 0 10 | 11 | override def preStart() { 12 | log.info("Starting WorkerActor instance hashcode # {}", this.hashCode()) 13 | } 14 | override def postStop() { 15 | log.info("Stopping WorkerActor instance hashcode # {}", this.hashCode()) 16 | } 17 | def receive: Receive = { 18 | case value: Int => 19 | if (value <= 0) 20 | throw new ArithmeticException("Number equal or less than zero") 21 | else 22 | state = value 23 | case result: Result => 24 | sender ! state 25 | case ex: NullPointerException => 26 | throw new NullPointerException("Null Value Passed") 27 | case _ => 28 | throw new IllegalArgumentException("Wrong Arguement") 29 | } 30 | } -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/scala/akka/first/app/scala/actors/ReduceActor.scala: -------------------------------------------------------------------------------- 1 | package akka.first.app.scala.actors 2 | 3 | import scala.collection.immutable._ 4 | 5 | import akka.actor.actorRef2Scala 6 | import akka.actor.Actor 7 | import akka.actor.ActorRef 8 | import akka.first.app.scala.MapData 9 | import akka.first.app.scala.ReduceData 10 | import akka.first.app.scala.Word 11 | 12 | class ReduceActor(aggregateActor: ActorRef) extends Actor { 13 | 14 | val defaultCount: Int = 1 15 | def receive: Receive = { 16 | case message: MapData => 17 | aggregateActor ! reduce(message.dataList) 18 | } 19 | 20 | def reduce(dataList: List[Word]): ReduceData = { 21 | var reducedMap = new HashMap[String, Int] 22 | for (wc: Word <- dataList) { 23 | var word: String = wc.word 24 | if (reducedMap.contains(word)) { 25 | var count:Int = reducedMap.get(word).get + defaultCount 26 | reducedMap += word -> count 27 | } else { 28 | reducedMap += word -> defaultCount 29 | } 30 | } 31 | return new ReduceData(reducedMap) 32 | } 33 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example/roundrobin/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example.roundrobin; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | import akka.routing.RoundRobinRouter; 7 | import org.akka.essentials.java.router.example.MsgEchoActor; 8 | 9 | import java.util.concurrent.TimeUnit; 10 | 11 | public class Example { 12 | 13 | /** 14 | * @param args 15 | * @throws InterruptedException 16 | */ 17 | public static void main(String[] args) throws InterruptedException { 18 | ActorSystem _system = ActorSystem.create("RoundRobinRouterExample"); 19 | ActorRef roundRobinRouter = _system.actorOf(new Props( 20 | MsgEchoActor.class).withRouter(new RoundRobinRouter(5)),"myRoundRobinRouterActor"); 21 | 22 | for (int i = 1; i <= 10; i++) { 23 | //sends messages in a round robin way to all the actors 24 | roundRobinRouter.tell(i); 25 | if (i == 5) { 26 | TimeUnit.MILLISECONDS.sleep(100); 27 | System.out.println("\n"); 28 | } 29 | } 30 | _system.shutdown(); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example2/WorkerTaskA.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example2; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.zeromq.Connect; 6 | import akka.zeromq.Frame; 7 | import akka.zeromq.Identity; 8 | import akka.zeromq.Listener; 9 | import akka.zeromq.SocketOption; 10 | import akka.zeromq.ZMQMessage; 11 | import akka.zeromq.ZeroMQExtension; 12 | 13 | public class WorkerTaskA extends UntypedActor { 14 | ActorRef subSocket = ZeroMQExtension.get(getContext().system()) 15 | .newDealerSocket( 16 | new SocketOption[] { new Connect("tcp://127.0.0.1:1237"), 17 | new Listener(getSelf()), 18 | new Identity("A".getBytes()) }); 19 | 20 | @Override 21 | public void onReceive(Object message) throws Exception { 22 | 23 | if (message instanceof ZMQMessage) { 24 | ZMQMessage m = (ZMQMessage) message; 25 | String mesg = new String(m.payload(0)); 26 | subSocket.tell((new ZMQMessage(new Frame(mesg 27 | + " Processed the workload for A")))); 28 | } 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example2/WorkerTaskB.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example2; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.zeromq.Connect; 6 | import akka.zeromq.Frame; 7 | import akka.zeromq.Identity; 8 | import akka.zeromq.Listener; 9 | import akka.zeromq.SocketOption; 10 | import akka.zeromq.ZMQMessage; 11 | import akka.zeromq.ZeroMQExtension; 12 | 13 | public class WorkerTaskB extends UntypedActor { 14 | ActorRef subSocket = ZeroMQExtension.get(getContext().system()) 15 | .newDealerSocket( 16 | new SocketOption[] { new Connect("tcp://127.0.0.1:1237"), 17 | new Listener(getSelf()), 18 | new Identity("B".getBytes()) }); 19 | 20 | @Override 21 | public void onReceive(Object message) throws Exception { 22 | 23 | if (message instanceof ZMQMessage) { 24 | ZMQMessage m = (ZMQMessage) message; 25 | String mesg = new String(m.payload(0)); 26 | subSocket.tell((new ZMQMessage(new Frame(mesg 27 | + " Processed the workload for B")))); 28 | } 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/stockticker/example/StockApplication.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.stockticker.example; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.agent.Agent; 5 | 6 | public class StockApplication { 7 | 8 | public static void main(String[] args) throws Exception { 9 | ActorSystem _system = ActorSystem.create("Agent-example"); 10 | Stock stock = new Stock("APPL", new Agent(new Float("600.45"), 11 | _system)); 12 | 13 | Thread[] readerThreads = new Thread[10]; 14 | Thread[] updateThreads = new Thread[5]; 15 | for (int i = 0; i < 10; i++) { 16 | readerThreads[i] = new Thread(new StockReader(stock)); 17 | readerThreads[i].setName("#" + i); 18 | } 19 | for (int i = 0; i < 5; i++) { 20 | updateThreads[i] = new Thread(new StockUpdater(stock)); 21 | updateThreads[i].setName("#" + i); 22 | } 23 | for (int i = 0; i < 10; i++) 24 | readerThreads[i].start(); 25 | 26 | for (int i = 0; i < 5; i++) 27 | updateThreads[i].start(); 28 | 29 | Thread.sleep(3000); 30 | _system.shutdown(); 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example3/MyActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3 2 | import akka.actor.ActorSystem 3 | import akka.actor.Props 4 | import akka.pattern.ask 5 | import akka.util.duration._ 6 | import akka.dispatch.Await 7 | import akka.util.Timeout 8 | import akka.actor.ActorLogging 9 | import akka.actor.Actor 10 | import akka.actor.OneForOneStrategy 11 | import akka.dispatch.Future 12 | import akka.actor.SupervisorStrategy._ 13 | import akka.actor.ActorRef 14 | 15 | case class Result 16 | case class DeadWorker 17 | case class RegisterWorker(val worker: ActorRef, val supervisor: ActorRef) 18 | 19 | object MyActorSystem { 20 | 21 | def main(args: Array[String]): Unit = { 22 | val system = ActorSystem("faultTolerance") 23 | 24 | val supervisor = system.actorOf(Props[SupervisorActor], name = "supervisor") 25 | 26 | var mesg: Int = 8 27 | supervisor ! mesg 28 | 29 | supervisor ! "Do Something" 30 | 31 | Thread.sleep(4000) 32 | 33 | supervisor ! mesg 34 | 35 | system.shutdown 36 | } 37 | } -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/scala/org/akka/essentials/unittest/example/SupervisorActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.example 2 | import akka.actor.SupervisorStrategy.Escalate 3 | import akka.actor.SupervisorStrategy.Resume 4 | import akka.actor.SupervisorStrategy.Stop 5 | import akka.actor.actorRef2Scala 6 | import akka.actor.ActorRef 7 | import akka.actor.Actor 8 | import akka.actor.OneForOneStrategy 9 | import akka.actor.Props 10 | import akka.util.duration.intToDurationInt 11 | 12 | class SupervisorActor() extends Actor { 13 | 14 | var childActor: ActorRef = _ 15 | 16 | def getChildActor() = childActor 17 | 18 | def receive: Receive = { 19 | case message: Props => 20 | childActor = context.actorOf(message, name = "childActor") 21 | sender ! childActor 22 | case message => 23 | childActor.tell(message, sender) 24 | } 25 | 26 | override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { 27 | case _: NullPointerException => Resume 28 | case _: IllegalArgumentException => Stop 29 | case _: Exception => Escalate 30 | } 31 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/scala/org/akka/essentials/scala/router/example/scattergatherfirstcomplete/Example.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.router.example.scattergatherfirstcomplete 2 | import org.akka.essentials.scala.router.example.MsgEchoActor 3 | import org.akka.essentials.scala.router.example.RandomTimeActor 4 | import akka.actor.ActorSystem 5 | import akka.actor.Props 6 | import akka.pattern.ask 7 | import akka.routing.ScatterGatherFirstCompletedRouter 8 | import akka.util.Timeout 9 | import scala.concurrent.Await 10 | import scala.concurrent.duration._ 11 | 12 | object Example { 13 | def main(args: Array[String]): Unit = { 14 | val _system = ActorSystem("SGFCRouterExample") 15 | val scatterGatherFirstCompletedRouter = _system.actorOf(Props[RandomTimeActor].withRouter( 16 | ScatterGatherFirstCompletedRouter(nrOfInstances = 5, within = 5 seconds)), name = "mySGFCRouterActor") 17 | 18 | implicit val timeout = Timeout(5 seconds) 19 | val futureResult = scatterGatherFirstCompletedRouter ? "message" 20 | val result = Await.result(futureResult, timeout.duration) 21 | System.out.println(result) 22 | 23 | _system.shutdown() 24 | } 25 | } -------------------------------------------------------------------------------- /AkkaUnitTest/src/main/java/org/akka/essentials/unittest/actors/TickTock.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.unittest.actors; 2 | 3 | import akka.actor.UntypedActor; 4 | 5 | public class TickTock extends UntypedActor { 6 | 7 | public static class Tick { 8 | String message; 9 | public Tick(String inStr) { 10 | message = inStr; 11 | } 12 | }; 13 | 14 | public static class Tock { 15 | String message; 16 | public Tock(String inStr) { 17 | message = inStr; 18 | } 19 | }; 20 | 21 | public boolean state = false; 22 | 23 | @Override 24 | public void onReceive(Object message) throws Exception { 25 | if (message instanceof Tick) { 26 | tick((Tick) message); 27 | } else if (message instanceof Tock) { 28 | tock((Tock) message); 29 | } else 30 | throw new IllegalArgumentException("boom!"); 31 | } 32 | 33 | public void tock(Tock message) { 34 | // do some processing here 35 | if (state == false) 36 | state = true; 37 | else 38 | state = false; 39 | } 40 | 41 | public void tick(Tick message) { 42 | // do some processing here 43 | sender().tell("processed the tick message"); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/scala/org/akka/essentials/scala/future/example/ProcessOrderActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.future.example 2 | import akka.actor.Actor 3 | import akka.actor.Props 4 | import akka.pattern.ask 5 | import akka.pattern.pipe 6 | import akka.util.Timeout 7 | import scala.concurrent.Future 8 | import java.util.concurrent.TimeUnit 9 | import scala.concurrent.duration._ 10 | import scala.concurrent.ExecutionContext.Implicits.global 11 | 12 | class ProcessOrderActor extends Actor { 13 | 14 | implicit val timeout = Timeout(5 seconds) 15 | val orderActor = context.actorOf(Props[OrderActor]) 16 | val addressActor = context.actorOf(Props[AddressActor]) 17 | val orderAggregateActor = context.actorOf(Props[OrderAggregateActor]) 18 | 19 | def receive = { 20 | case userId: Integer => 21 | val aggResult: Future[OrderHistory] = 22 | for { 23 | order <- ask(orderActor, userId).mapTo[Order] // call pattern directly 24 | address <- addressActor ask userId mapTo manifest[Address] // call by implicit conversion 25 | } yield OrderHistory(order, address) 26 | aggResult pipeTo orderAggregateActor 27 | } 28 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example4/PushActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorLogging 5 | import akka.actor.Cancellable 6 | import akka.util.duration.intToDurationInt 7 | import akka.zeromq.Bind 8 | import akka.zeromq.Frame 9 | import akka.zeromq.Listener 10 | import akka.zeromq.SocketType 11 | import akka.zeromq.ZMQMessage 12 | import akka.zeromq.ZeroMQExtension 13 | 14 | case class Tick 15 | 16 | class PushActor extends Actor with ActorLogging { 17 | val pushSocket = ZeroMQExtension(context.system).newSocket(SocketType.Push, Bind("tcp://127.0.0.1:1234"), Listener(self)) 18 | 19 | var count = 0 20 | var cancellable: Cancellable = null 21 | override def preStart() { 22 | cancellable = context.system.scheduler.schedule(1 second, 1 second, self, Tick) 23 | } 24 | 25 | def receive: Receive = { 26 | case Tick => 27 | count += 1 28 | var payload = "Hi there! (" + count + ")" 29 | pushSocket ! ZMQMessage(Seq(Frame(payload))) 30 | if (count == 5) { 31 | cancellable.cancel() 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/transactor/example/AccountActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.transactor.example 2 | 3 | import scala.concurrent.stm.Ref 4 | import akka.actor.Actor 5 | import akka.transactor.Coordinated 6 | 7 | class AccountActor(accountNumber: String, inBalance: Float) extends Actor { 8 | 9 | val balance = Ref(inBalance) 10 | 11 | def receive = { 12 | case value: AccountBalance => 13 | sender ! new AccountBalance(accountNumber, balance.single.get) 14 | 15 | case coordinated@Coordinated(message: AccountDebit) => 16 | // coordinated atomic ... 17 | coordinated atomic { 18 | implicit t => 19 | //check for funds availability 20 | if (balance.get(t) > message.amount) 21 | balance.transform(_ - message.amount) 22 | else 23 | throw new IllegalStateException( 24 | "Insufficient Balance") 25 | } 26 | case coordinated@Coordinated(message: AccountCredit) => 27 | // coordinated atomic ... 28 | coordinated atomic { 29 | implicit t => 30 | balance.transform(_ + message.amount) 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /ClientServerExample/src/main/java/org/akka/essentials/clientserver/sample/ServerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.clientserver.sample; 2 | 3 | import akka.actor.PoisonPill; 4 | import akka.actor.UntypedActor; 5 | import akka.event.Logging; 6 | import akka.event.LoggingAdapter; 7 | 8 | public class ServerActor extends UntypedActor { 9 | 10 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 11 | private static int instanceCounter = 0; 12 | 13 | @Override 14 | public void preStart() { 15 | instanceCounter++; 16 | log.info("Starting ServerActor instance #" + instanceCounter 17 | + ", hashcode #" + this.hashCode()); 18 | } 19 | 20 | @Override 21 | public void onReceive(Object message) throws Exception { 22 | if (message instanceof String) { 23 | getSender().tell(message + " got something"); 24 | } else if (message instanceof PoisonPill) { 25 | getContext().system().shutdown(); 26 | } 27 | } 28 | 29 | @Override 30 | public void postStop() { 31 | log.info("Stoping ServerActor instance #" + instanceCounter 32 | + ", hashcode #" + this.hashCode()); 33 | instanceCounter--; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example1/SupervisorActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example1 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.actor.Props 5 | import akka.dispatch.Future 6 | import akka.pattern.ask 7 | import akka.util.Timeout 8 | import akka.dispatch.Await 9 | 10 | class SupervisorActor extends Actor with ActorLogging { 11 | import akka.actor.OneForOneStrategy 12 | import akka.actor.SupervisorStrategy._ 13 | import akka.util.duration._ 14 | import org.akka.essentials.supervisor.example1.Result 15 | 16 | val childActor = context.actorOf(Props[WorkerActor], name = "workerActor") 17 | 18 | override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) { 19 | 20 | case _: ArithmeticException => Resume 21 | case _: NullPointerException => Restart 22 | case _: IllegalArgumentException => Stop 23 | case _: Exception => Escalate 24 | } 25 | 26 | def receive = { 27 | case result: Result => 28 | childActor.tell(result, sender) 29 | case msg: Object => 30 | childActor ! msg 31 | 32 | } 33 | } -------------------------------------------------------------------------------- /AkkaSerializerExample/src/main/java/org/akka/essentials/serializer/MySerializer.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.serializer; 2 | 3 | import akka.serialization.JSerializer; 4 | 5 | import com.google.gson.Gson; 6 | import com.google.gson.GsonBuilder; 7 | 8 | public class MySerializer extends JSerializer { 9 | // create the Gson object 10 | private Gson gson = new GsonBuilder().serializeNulls().create(); 11 | 12 | public int identifier() { 13 | return 12062010; 14 | } 15 | 16 | public boolean includeManifest() { 17 | return true; 18 | } 19 | 20 | /** 21 | * "toBinary" serializes the given object to an Array of Bytes 22 | * 23 | * @param arg0 24 | * @return 25 | */ 26 | public byte[] toBinary(Object arg0) { 27 | 28 | return gson.toJson(arg0).getBytes(); 29 | 30 | } 31 | 32 | /** 33 | * "fromBinary" deserializes the given array, using the type hint (if any, 34 | * see "includeManifest" above) into the optionally provided classLoader. 35 | * 36 | * @param arg0 37 | * @param arg1 38 | * @return 39 | */ 40 | @Override 41 | public Object fromBinaryJava(byte[] arg0, Class arg1) { 42 | 43 | return gson.fromJson(new String(arg0), arg1); 44 | 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/stockticker/example/StockApplication.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.stockticker.example 2 | 3 | import akka.actor.ActorSystem 4 | import akka.agent.Agent 5 | import java.lang.Float 6 | 7 | case class Stock(symbol: String, price: Agent[Float]) 8 | 9 | object StockApplication { 10 | 11 | def main(args: Array[String]): Unit = { 12 | val _system = ActorSystem("Agent-example") 13 | val stock = new Stock("APPL", Agent(new Float("600.45"))(_system)) 14 | 15 | val readerThreads = new Array[Thread](10) 16 | val updateThreads = new Array[Thread](10) 17 | 18 | for (i <- 0 until readerThreads.length) { 19 | readerThreads(i) = new Thread(new StockReader(stock)) 20 | readerThreads(i).setName("#" + i) 21 | } 22 | for (i <- 0 until updateThreads.length) { 23 | updateThreads(i) = new Thread(new StockUpdater(stock)) 24 | updateThreads(i).setName("#" + i) 25 | } 26 | 27 | for (i <- 0 until readerThreads.length) 28 | readerThreads(i).start() 29 | 30 | for (i <- 0 until updateThreads.length) 31 | updateThreads(i).start() 32 | 33 | Thread.sleep(3000) 34 | _system.shutdown() 35 | } 36 | } -------------------------------------------------------------------------------- /AkkaWithZeroMQ/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | org.akka.essentials 6 | AkkaWithZeroMQ 7 | 0.0.1-SNAPSHOT 8 | jar 9 | 10 | AkkaWithZeroMQ 11 | http://maven.apache.org 12 | 13 | 14 | UTF-8 15 | 16 | 17 | 18 | 19 | com.typesafe.akka 20 | akka-actor 21 | 2.0.2 22 | 23 | 24 | com.typesafe.akka 25 | akka-zeromq 26 | 2.0.2 27 | 28 | 29 | 30 | 31 | 32 | typesafe 33 | Typesafe Repository 34 | http://repo.typesafe.com/typesafe/releases/ 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /GridPatternExample/src/main/java/org/akka/essentials/grid/controller/WorkSchedulerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid.controller; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | import scala.concurrent.duration.Duration; 6 | import akka.actor.UntypedActor; 7 | import akka.event.Logging; 8 | import akka.event.LoggingAdapter; 9 | 10 | public class WorkSchedulerActor extends UntypedActor { 11 | 12 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 13 | 14 | @Override 15 | public void onReceive(Object message) throws Exception { 16 | 17 | if (message instanceof Integer) { 18 | getContext() 19 | .system() 20 | .scheduler() 21 | .scheduleOnce( 22 | Duration.create(((Integer) message).intValue(), 23 | TimeUnit.SECONDS), getContext().sender(), 24 | "SendWork",getContext().dispatcher()); 25 | } else if (message instanceof String) { 26 | log.info("Recieved work sending request"); 27 | getContext() 28 | .system() 29 | .scheduler() 30 | .scheduleOnce(Duration.create(1000, TimeUnit.MILLISECONDS), 31 | getContext().sender(), "SendWork",getContext().dispatcher()); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /AkkaRemotingExample/LocalNodeApp/src/main/java/org/akka/essentials/localnode/LocalActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.localnode; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | import akka.dispatch.Await; 6 | import akka.dispatch.Future; 7 | import akka.event.Logging; 8 | import akka.event.LoggingAdapter; 9 | import akka.pattern.Patterns; 10 | import akka.util.Duration; 11 | import akka.util.Timeout; 12 | 13 | public class LocalActor extends UntypedActor { 14 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 15 | Timeout timeout = new Timeout(Duration.parse("5 seconds")); 16 | 17 | ActorRef remoteActor; 18 | 19 | @Override 20 | public void preStart() { 21 | //Get a reference to the remote actor 22 | remoteActor = getContext().actorFor( 23 | "akka://RemoteNodeApp@10.101.161.20:2552/user/remoteActor"); 24 | } 25 | 26 | @Override 27 | public void onReceive(Object message) throws Exception { 28 | Future future = Patterns.ask(remoteActor, message.toString(), 29 | timeout); 30 | String result = (String) Await.result(future, timeout.duration()); 31 | log.info("Message received from Server -> {}", result); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example1/PingPong.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example1; 2 | 3 | public class PingPong { 4 | // state variable identifying whose turn it is. 5 | private String whoseTurn = null; 6 | 7 | public synchronized boolean hit(String opponent) { 8 | 9 | String x = Thread.currentThread().getName(); 10 | 11 | if (whoseTurn == null) { 12 | whoseTurn = x; 13 | return true; 14 | } 15 | 16 | if (x.compareTo(whoseTurn) == 0) { 17 | System.out.println("PING! (" + x + ")"); 18 | whoseTurn = opponent; 19 | notifyAll(); 20 | } else { 21 | try { 22 | long t1 = System.currentTimeMillis(); 23 | wait(2500); 24 | if ((System.currentTimeMillis() - t1) > 2500) { 25 | System.out.println("****** TIMEOUT! " + x 26 | + " is waiting for " + whoseTurn + " to play."); 27 | } 28 | } catch (InterruptedException e) { 29 | } 30 | } 31 | 32 | if (whoseTurn.compareTo("DONE") == 0) 33 | return false; 34 | 35 | if (opponent.compareTo("DONE") == 0) { 36 | whoseTurn = opponent; 37 | notifyAll(); 38 | return false; 39 | } 40 | return true; // keep playing. 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/transactor/example/BankApplication.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.transactor.example 2 | 3 | import java.lang.Float 4 | 5 | import scala.concurrent.duration._ 6 | 7 | import akka.actor.ActorSystem 8 | import akka.actor.Props 9 | import akka.util.Timeout 10 | 11 | case class AccountBalance(accountNumber: String, accountBalance: Float) 12 | 13 | case class AccountCredit(amount: Float) 14 | 15 | case class AccountDebit(amount: Float) 16 | 17 | case class TransferMsg(amtToBeTransferred: Float) 18 | 19 | object BankApplication { 20 | val system = ActorSystem("STM-Example") 21 | implicit val timeout = Timeout(5 seconds) 22 | val bank = system.actorOf(Props[BankActor], name = "BankActor") 23 | 24 | def main(args: Array[String]): Unit = { 25 | 26 | showBalances() 27 | bank ! new TransferMsg(1500) 28 | showBalances() 29 | bank ! new TransferMsg(1400) 30 | showBalances() 31 | bank ! new TransferMsg(3500) 32 | showBalances() 33 | 34 | system.shutdown() 35 | } 36 | 37 | def showBalances(): Unit = { 38 | Thread.sleep(2000) 39 | bank ! new AccountBalance("XYZ", 0) 40 | bank ! new AccountBalance("ABC", 0) 41 | } 42 | 43 | } -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/scala/akka/first/app/scala/actors/MapActor.scala: -------------------------------------------------------------------------------- 1 | package akka.first.app.scala.actors 2 | import scala.collection.immutable._ 3 | 4 | import java.util.StringTokenizer 5 | 6 | import akka.actor.actorRef2Scala 7 | import akka.actor.Actor 8 | import akka.actor.ActorRef 9 | import akka.first.app.scala.MapData 10 | import akka.first.app.scala.Word 11 | 12 | class MapActor(reduceActor: ActorRef) extends Actor { 13 | 14 | val STOP_WORDS_LIST = List("a", "am", "an", "and", "are", "as", "at", "be", 15 | "do", "go", "if", "in", "is", "it", "of", "on", "the", "to") 16 | 17 | val defaultCount: Int = 1 18 | 19 | def receive: Receive = { 20 | case message: String => 21 | reduceActor ! evaluateExpression(message) 22 | } 23 | def evaluateExpression(line: String): MapData = { 24 | var dataList = List[Word]() 25 | var parser: StringTokenizer = new StringTokenizer(line) 26 | while (parser.hasMoreTokens()) { 27 | var word: String = parser.nextToken().toLowerCase() 28 | if (!STOP_WORDS_LIST.contains(word)) { 29 | dataList = new Word(word, defaultCount) :: dataList 30 | } 31 | } 32 | return new MapData(dataList) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ActorMessagingExample/src/main/java/org/akka/essentials/java/hotswap/example/PingPongActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.hotswap.example; 2 | 3 | import akka.actor.UntypedActor; 4 | import akka.japi.Procedure; 5 | 6 | public class PingPongActor extends UntypedActor { 7 | 8 | static String PING = "PING"; 9 | static String PONG = "PONG"; 10 | int count = 0; 11 | 12 | @Override 13 | public void onReceive(Object message) throws Exception { 14 | if (message instanceof String) { 15 | if (((String) message).matches(PING)) { 16 | System.out.println("PING"); 17 | count += 1; 18 | Thread.sleep(100); 19 | getSelf().tell(PONG); 20 | getContext().become(new Procedure() { 21 | public void apply(Object message) { 22 | if (message instanceof String) { 23 | if (((String) message).matches(PONG)) { 24 | System.out.println("PONG"); 25 | count += 1; 26 | try { 27 | Thread.sleep(100); 28 | } catch (InterruptedException e) { 29 | // 30 | } 31 | getSelf().tell(PING); 32 | getContext().unbecome(); 33 | } 34 | } 35 | } 36 | }); 37 | if (count > 10) 38 | getContext().stop(getSelf()); 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/java/akka/first/app/java/actors/MasterActor.java: -------------------------------------------------------------------------------- 1 | package akka.first.app.java.actors; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.Props; 5 | import akka.actor.UntypedActor; 6 | import akka.actor.UntypedActorFactory; 7 | import akka.first.app.java.messages.Result; 8 | 9 | public class MasterActor extends UntypedActor { 10 | 11 | private ActorRef aggregateActor = getContext().actorOf( 12 | new Props(AggregateActor.class), "aggregate"); 13 | 14 | private ActorRef reduceActor = getContext().actorOf( 15 | new Props(new UntypedActorFactory() { 16 | public UntypedActor create() { 17 | return new ReduceActor(aggregateActor); 18 | } 19 | }), "reduce"); 20 | 21 | private ActorRef mapActor = getContext().actorOf( 22 | new Props(new UntypedActorFactory() { 23 | public UntypedActor create() { 24 | return new MapActor(reduceActor); 25 | } 26 | }), "map"); 27 | 28 | @Override 29 | public void onReceive(Object message) throws Exception { 30 | if (message instanceof String) { 31 | mapActor.tell(message); 32 | } else if (message instanceof Result) { 33 | aggregateActor.tell(message); 34 | } else 35 | unhandled(message); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example1/PublisherActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example1; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.Cancellable; 5 | import akka.actor.UntypedActor; 6 | import akka.util.Duration; 7 | import akka.zeromq.Bind; 8 | import akka.zeromq.Frame; 9 | import akka.zeromq.ZMQMessage; 10 | import akka.zeromq.ZeroMQExtension; 11 | 12 | public class PublisherActor extends UntypedActor { 13 | public static final Object TICK = "TICK"; 14 | int count = 0; 15 | Cancellable cancellable; 16 | ActorRef pubSocket = ZeroMQExtension.get(getContext().system()) 17 | .newPubSocket(new Bind("tcp://127.0.0.1:1237")); 18 | 19 | @Override 20 | public void preStart() { 21 | cancellable = getContext() 22 | .system() 23 | .scheduler() 24 | .schedule(Duration.parse("1 second"), 25 | Duration.parse("1 second"), getSelf(), TICK); 26 | } 27 | 28 | @Override 29 | public void onReceive(Object message) throws Exception { 30 | if (message.equals(TICK)) { 31 | pubSocket.tell(new ZMQMessage(new Frame("someTopic"), new Frame( 32 | "This is the workload " + ++count))); 33 | 34 | if(count==10) 35 | cancellable.cancel(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /WordCountMapReduce/src/main/java/org/akka/essentials/wc/mapreduce/example/client/ClientActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.wc.mapreduce.example.client; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.UntypedActor; 5 | 6 | public class ClientActor extends UntypedActor { 7 | 8 | private ActorRef remoteServer = null; 9 | @SuppressWarnings("unused") 10 | private ActorRef fileReadActor = null; 11 | private long start; 12 | 13 | /** 14 | * @param args 15 | */ 16 | public ClientActor(ActorRef inRemoteServer) { 17 | 18 | remoteServer = inRemoteServer; 19 | } 20 | 21 | @Override 22 | public void onReceive(Object message) throws Exception { 23 | if (message instanceof String) { 24 | String msg = (String) message; 25 | remoteServer.tell(msg); 26 | } 27 | } 28 | 29 | @Override 30 | public void preStart() { 31 | start = System.currentTimeMillis(); 32 | } 33 | 34 | @Override 35 | public void postStop() { 36 | // tell the world that the calculation is complete 37 | long timeSpent = (System.currentTimeMillis() - start) / 1000; 38 | System.out 39 | .println(String 40 | .format("\n\tClientActor estimate: \t\t\n\tCalculation time: \t%s Secs", 41 | timeSpent)); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/pingpong/example2/PingPong.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.pingpong.example2 2 | 3 | import scala.concurrent.stm.Ref 4 | 5 | class PingPong(whoseTurn: Ref[String]) { 6 | 7 | def hit(opponent: String): Boolean = { 8 | 9 | val x: String = Thread.currentThread().getName 10 | 11 | if (whoseTurn.single.get == "") { 12 | whoseTurn.single.set(x) 13 | return true 14 | } else if (whoseTurn.single.get.compareTo(x) == 0) { 15 | println("PING! (" + x + ")") 16 | whoseTurn.single.set(opponent) 17 | return true 18 | } else { 19 | try { 20 | val t1 = System.currentTimeMillis() 21 | wait(2500) 22 | if ((System.currentTimeMillis() - t1) > 2500) { 23 | println("****** TIMEOUT! " + x 24 | + " is waiting for " + whoseTurn + " to play.") 25 | } 26 | } catch { 27 | case _ : Throwable => 28 | // eat the exception 29 | } 30 | } 31 | if (opponent.compareTo("DONE") == 0) { 32 | whoseTurn.single.set(opponent) 33 | return false 34 | } 35 | if (whoseTurn.single.get.compareTo("DONE") == 0) { 36 | return false 37 | } 38 | return true // keep playing. 39 | } 40 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/transactor/example2/BankApplication.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.transactor.example2 2 | 3 | import java.lang.Float 4 | 5 | import scala.concurrent.duration.DurationInt 6 | 7 | import akka.actor.ActorSystem 8 | import akka.actor.Props 9 | import akka.actor.actorRef2Scala 10 | import akka.util.Timeout 11 | 12 | case class AccountBalance(accountNumber: String, accountBalance: Float) 13 | 14 | case class AccountCredit(amount: Float) 15 | 16 | case class AccountDebit(amount: Float) 17 | 18 | case class TransferMsg(amtToBeTransferred: Float) 19 | 20 | object BankApplication { 21 | val system = ActorSystem("STM-Example") 22 | implicit val timeout = Timeout(5 seconds) 23 | val bank = system.actorOf(Props[BankActor], name = "BankActor") 24 | 25 | def main(args: Array[String]): Unit = { 26 | 27 | showBalances() 28 | bank ! new TransferMsg(1500) 29 | showBalances() 30 | bank ! new TransferMsg(1400) 31 | showBalances() 32 | bank ! new TransferMsg(3500) 33 | showBalances() 34 | system.shutdown() 35 | } 36 | 37 | def showBalances(): Unit = { 38 | Thread.sleep(2000) 39 | bank ! new AccountBalance("XYZ", 0) 40 | bank ! new AccountBalance("ABC", 0) 41 | } 42 | } -------------------------------------------------------------------------------- /WordCountMapReduce/src/main/java/org/akka/essentials/wc/mapreduce/example/client/FileReadActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.wc.mapreduce.example.client; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStreamReader; 6 | 7 | import akka.actor.UntypedActor; 8 | 9 | public class FileReadActor extends UntypedActor { 10 | 11 | @Override 12 | public void onReceive(Object message) throws Exception { 13 | 14 | if (message instanceof String) { 15 | String fileName = (String) message; 16 | try { 17 | BufferedReader reader = new BufferedReader( 18 | new InputStreamReader(Thread.currentThread() 19 | .getContextClassLoader().getResource(fileName) 20 | .openStream())); 21 | String line = null; 22 | while ((line = reader.readLine()) != null) { 23 | //System.out.println("File contents->" + line); 24 | getSender().tell(line); 25 | } 26 | System.out.println("All lines send !"); 27 | // send the EOF message.. 28 | getSender().tell(String.valueOf("EOF")); 29 | } catch (IOException x) { 30 | System.err.format("IOException: %s%n", x); 31 | } 32 | } else 33 | throw new IllegalArgumentException("Unknown message [" + message 34 | + "]"); 35 | } 36 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example2/custom/Example1.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example2.custom; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | import akka.routing.RandomRouter; 7 | import org.akka.essentials.java.router.example.MsgEchoActor; 8 | 9 | import java.util.Arrays; 10 | 11 | public class Example1 { 12 | 13 | /** 14 | * @param args 15 | * @throws InterruptedException 16 | */ 17 | public static void main(String[] args) throws InterruptedException { 18 | ActorSystem _system = ActorSystem.create("CustomRouteeRouterExample"); 19 | 20 | ActorRef echoActor1 = _system.actorOf(new Props(MsgEchoActor.class)); 21 | ActorRef echoActor2 = _system.actorOf(new Props(MsgEchoActor.class)); 22 | ActorRef echoActor3 = _system.actorOf(new Props(MsgEchoActor.class)); 23 | 24 | Iterable routees = Arrays.asList(new ActorRef[] { echoActor1, 25 | echoActor2, echoActor3 }); 26 | 27 | ActorRef randomRouter = _system.actorOf(new Props(MsgEchoActor.class) 28 | .withRouter(RandomRouter.create(routees))); 29 | 30 | for (int i = 1; i <= 10; i++) { 31 | // sends randomly to actors 32 | randomRouter.tell(i); 33 | } 34 | _system.shutdown(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /FirstAkkaApplication/src/main/java/akka/first/app/java/actors/AggregateActor.java: -------------------------------------------------------------------------------- 1 | package akka.first.app.java.actors; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import akka.actor.UntypedActor; 7 | import akka.first.app.java.messages.ReduceData; 8 | import akka.first.app.java.messages.Result; 9 | 10 | public class AggregateActor extends UntypedActor { 11 | 12 | private Map finalReducedMap = new HashMap(); 13 | 14 | @Override 15 | public void onReceive(Object message) throws Exception { 16 | if (message instanceof ReduceData) { 17 | ReduceData reduceData = (ReduceData) message; 18 | aggregateInMemoryReduce(reduceData.getReduceDataList()); 19 | } else if (message instanceof Result) { 20 | System.out.println(finalReducedMap.toString()); 21 | } else 22 | unhandled(message); 23 | } 24 | 25 | private void aggregateInMemoryReduce(Map reducedList) { 26 | Integer count = null; 27 | for (String key : reducedList.keySet()) { 28 | if (finalReducedMap.containsKey(key)) { 29 | count = reducedList.get(key) + finalReducedMap.get(key); 30 | finalReducedMap.put(key, count); 31 | } else { 32 | finalReducedMap.put(key, reducedList.get(key)); 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/pingpong/example2/PingPong.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.pingpong.example2; 2 | 3 | import scala.concurrent.stm.Ref; 4 | 5 | public class PingPong { 6 | 7 | //updates to Ref.View are synchronous 8 | Ref.View whoseTurn; 9 | 10 | public PingPong(Ref.View player) { 11 | whoseTurn = player; 12 | } 13 | 14 | public boolean hit(final String opponent) { 15 | final String x = Thread.currentThread().getName(); 16 | 17 | if (whoseTurn.get() == "") { 18 | whoseTurn.set(x); 19 | return true; 20 | } 21 | 22 | if (x.compareTo(whoseTurn.get()) == 0) { 23 | System.out.println("PING! (" + x + ")"); 24 | whoseTurn.set(opponent); 25 | } else { 26 | try { 27 | long t1 = System.currentTimeMillis(); 28 | wait(2500); 29 | if ((System.currentTimeMillis() - t1) > 2500) { 30 | System.out.println("****** TIMEOUT! " + x 31 | + " is waiting for " + whoseTurn + " to play."); 32 | } 33 | } catch (Exception e) { 34 | } 35 | } 36 | if (whoseTurn.get().compareTo("DONE") == 0) 37 | return false; 38 | 39 | if (opponent.compareTo("DONE") == 0) { 40 | whoseTurn.set(opponent); 41 | return false; 42 | } 43 | return true; // keep playing. 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /ClientServerExample/src/main/java/org/akka/essentials/clientserver/sample/ServerActorSystem.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.clientserver.sample; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.ActorSystem; 5 | import akka.actor.Props; 6 | import akka.event.Logging; 7 | import akka.event.LoggingAdapter; 8 | import akka.kernel.Bootable; 9 | 10 | import com.typesafe.config.ConfigFactory; 11 | 12 | public class ServerActorSystem implements Bootable { 13 | 14 | private LoggingAdapter log = null; 15 | private ActorSystem system; 16 | 17 | /* 18 | * default constructor 19 | */ 20 | public ServerActorSystem() { 21 | // load the configuration 22 | system = ActorSystem.create("ServerSys", ConfigFactory.load() 23 | .getConfig("ServerSys")); 24 | log = Logging.getLogger(system, this); 25 | // create the actor 26 | @SuppressWarnings("unused") 27 | ActorRef actor = system.actorOf(new Props(ServerActor.class), 28 | "serverActor"); 29 | } 30 | 31 | public void shutdown() { 32 | log.info("Shutting down the ServerActorSystem"); 33 | 34 | } 35 | 36 | public void startup() { 37 | // TODO Auto-generated method stub 38 | 39 | } 40 | 41 | public static void main(String[] args) { 42 | 43 | new ServerActorSystem(); 44 | 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /TypedActorExample/src/main/scala/org/akka/essentials/calculator/example2/CalculatorActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.calculator.example2 2 | import org.akka.essentials.calculator.Calculator 3 | import org.akka.essentials.calculator.CalculatorInt 4 | import akka.actor.ActorRef 5 | import akka.actor.ActorSystem 6 | import akka.actor.Props 7 | import akka.actor.TypedActor 8 | import akka.routing.BroadcastRouter 9 | import akka.actor.TypedProps 10 | 11 | object CalculatorActorSystem { 12 | def main(args: Array[String]): Unit = { 13 | 14 | val _system = ActorSystem("TypedActorsExample") 15 | 16 | val calculator1: CalculatorInt = 17 | TypedActor(_system).typedActorOf(TypedProps[Calculator]()) 18 | 19 | val calculator2: CalculatorInt = 20 | TypedActor(_system).typedActorOf(TypedProps[Calculator]()) 21 | 22 | // Create a router with Typed Actors 23 | val actor1: ActorRef = TypedActor(_system).getActorRefFor(calculator1) 24 | val actor2: ActorRef = TypedActor(_system).getActorRefFor(calculator2) 25 | 26 | val routees = Vector[ActorRef](actor1, actor2) 27 | val router = _system.actorOf(new Props().withRouter( 28 | BroadcastRouter(routees = routees))) 29 | 30 | router.tell("Hello there") 31 | 32 | _system.shutdown() 33 | } 34 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example3/MonitorActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example3; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import akka.actor.ActorRef; 7 | import akka.actor.Terminated; 8 | import akka.actor.UntypedActor; 9 | import akka.event.Logging; 10 | import akka.event.LoggingAdapter; 11 | 12 | public class MonitorActor extends UntypedActor { 13 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 14 | 15 | Map monitoredActors = new HashMap(); 16 | 17 | @Override 18 | public void onReceive(Object message) throws Exception { 19 | if (message instanceof Terminated) { 20 | final Terminated t = (Terminated) message; 21 | if (monitoredActors.containsKey(t.getActor())) { 22 | log.info("Received Worker Actor Termination Message -> {}", t 23 | .getActor().path()); 24 | log.info("Sending message to Supervisor"); 25 | monitoredActors.get(t.getActor()).tell(new DeadWorker()); 26 | } 27 | } else if (message instanceof RegisterWorker) { 28 | 29 | RegisterWorker msg = (RegisterWorker) message; 30 | getContext().watch(msg.worker); 31 | monitoredActors.put(msg.worker, msg.supervisor); 32 | 33 | } else { 34 | unhandled(message); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/scala/org/akka/essentials/supervisor/example2/SupervisorActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example2 2 | import akka.actor.Actor 3 | import akka.actor.ActorLogging 4 | import akka.actor.Props 5 | import akka.dispatch.Future 6 | import akka.pattern.ask 7 | import akka.util.Timeout 8 | import akka.dispatch.Await 9 | import akka.actor.AllForOneStrategy 10 | 11 | class SupervisorActor extends Actor with ActorLogging { 12 | import akka.actor.OneForOneStrategy 13 | import akka.actor.SupervisorStrategy._ 14 | import akka.util.duration._ 15 | import org.akka.essentials.supervisor.example2.Result 16 | 17 | val workerActor1 = context.actorOf(Props[WorkerActor1], name = "workerActor1") 18 | val workerActor2 = context.actorOf(Props[WorkerActor2], name = "workerActor2") 19 | 20 | override val supervisorStrategy = AllForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) { 21 | 22 | case _: ArithmeticException => Resume 23 | case _: NullPointerException => Restart 24 | case _: IllegalArgumentException => Stop 25 | case _: Exception => Escalate 26 | } 27 | 28 | def receive = { 29 | case result: Result => 30 | workerActor1.tell(result, sender) 31 | case msg: Object => 32 | workerActor1 ! msg 33 | 34 | } 35 | } -------------------------------------------------------------------------------- /AkkaSerializerExample/src/main/scala/org/akka/essentials/scala/serializer/MySerializationApp.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.serializer 2 | import akka.serialization.SerializationExtension 3 | import akka.actor.ActorSystem 4 | import com.typesafe.config.ConfigFactory 5 | 6 | case class MyMessage( name: String, age: Int, city: String) 7 | 8 | object MySerializationApp { 9 | 10 | def main(args: Array[String]): Unit = { 11 | val system = ActorSystem("MySerializableSys", ConfigFactory.load() 12 | .getConfig("MySerializableSys")); 13 | val log = system.log 14 | 15 | // Get the Serialization Extension 16 | val serialization = SerializationExtension(system) 17 | 18 | val originalMessage = new MyMessage("Munish", 36, "Bangalore") 19 | 20 | log.info("The original message is as {}", originalMessage) 21 | 22 | // Get the Binded Serializer for it 23 | val serializer = serialization 24 | .findSerializerFor(originalMessage); 25 | 26 | // Turn the object into bytes 27 | val bytes = serializer.toBinary(originalMessage); 28 | 29 | // Turn the byte[] back into an object, 30 | val deSerializedMessage = serializer.fromBinary( 31 | bytes, classOf[MyMessage]) 32 | 33 | log.info("The de-serialized message is as {}",deSerializedMessage); 34 | 35 | system.shutdown 36 | } 37 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example/BankApplication.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example; 2 | 3 | import org.akka.essentials.stm.transactor.example.msg.AccountBalance; 4 | import org.akka.essentials.stm.transactor.example.msg.TransferMsg; 5 | 6 | import akka.actor.ActorRef; 7 | import akka.actor.ActorSystem; 8 | import akka.actor.Props; 9 | 10 | public class BankApplication { 11 | ActorSystem _system = ActorSystem.apply("STM-Example"); 12 | ActorRef bank = _system.actorOf(new Props(BankActor.class), "BankActor"); 13 | 14 | public static void main(String args[]) { 15 | 16 | BankApplication bankApp = new BankApplication(); 17 | 18 | bankApp.showBalances(); 19 | 20 | bankApp.bank.tell(new TransferMsg(Float.valueOf("1500"))); 21 | 22 | bankApp.showBalances(); 23 | 24 | bankApp.bank.tell(new TransferMsg(Float.valueOf("1400"))); 25 | 26 | bankApp.showBalances(); 27 | 28 | bankApp.bank.tell(new TransferMsg(Float.valueOf("3500"))); 29 | 30 | bankApp.showBalances(); 31 | 32 | bankApp._system.shutdown(); 33 | 34 | } 35 | 36 | private void showBalances() { 37 | try { 38 | Thread.sleep(2000); 39 | bank.tell(new AccountBalance("XYZ")); 40 | bank.tell(new AccountBalance("ABC")); 41 | 42 | } catch (Exception e) { 43 | e.printStackTrace(); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example1/WorkerActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example1; 2 | 3 | import org.akka.essentials.supervisor.example1.MyActorSystem.Result; 4 | 5 | import akka.actor.UntypedActor; 6 | import akka.event.Logging; 7 | import akka.event.LoggingAdapter; 8 | 9 | public class WorkerActor extends UntypedActor { 10 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 11 | private int state = 0; 12 | 13 | @Override 14 | public void preStart() { 15 | log.info("Starting WorkerActor instance hashcode # {}", this.hashCode()); 16 | } 17 | 18 | public void onReceive(Object o) throws Exception { 19 | if (o instanceof String) { 20 | throw new NullPointerException("Null Value Passed"); 21 | } else if (o instanceof Integer) { 22 | Integer value = (Integer) o; 23 | if (value <= 0) { 24 | throw new ArithmeticException("Number equal or less than zero"); 25 | } else 26 | state = value; 27 | } else if (o instanceof Result) { 28 | getSender().tell(state); 29 | } else { 30 | throw new IllegalArgumentException("Wrong Argument"); 31 | } 32 | } 33 | 34 | @Override 35 | public void postStop() { 36 | log.info("Stopping WorkerActor instance hashcode # {}", this.hashCode()); 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/java/org/akka/essentials/stm/transactor/example2/BankApplication.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.stm.transactor.example2; 2 | 3 | import org.akka.essentials.stm.transactor.example2.msg.AccountBalance; 4 | import org.akka.essentials.stm.transactor.example2.msg.TransferMsg; 5 | 6 | import akka.actor.ActorRef; 7 | import akka.actor.ActorSystem; 8 | import akka.actor.Props; 9 | 10 | public class BankApplication { 11 | ActorSystem _system = ActorSystem.apply("STM-Example"); 12 | ActorRef bank = _system.actorOf(new Props(BankActor.class), "BankActor"); 13 | 14 | public static void main(String args[]) { 15 | 16 | BankApplication bankApp = new BankApplication(); 17 | 18 | bankApp.showBalances(); 19 | 20 | bankApp.bank.tell(new TransferMsg(Float.valueOf("1500"))); 21 | 22 | bankApp.showBalances(); 23 | 24 | bankApp.bank.tell(new TransferMsg(Float.valueOf("1400"))); 25 | 26 | bankApp.showBalances(); 27 | 28 | bankApp.bank.tell(new TransferMsg(Float.valueOf("3500"))); 29 | 30 | bankApp.showBalances(); 31 | 32 | bankApp._system.shutdown(); 33 | 34 | } 35 | 36 | private void showBalances() { 37 | try { 38 | Thread.sleep(2000); 39 | bank.tell(new AccountBalance("XYZ")); 40 | bank.tell(new AccountBalance("ABC")); 41 | 42 | } catch (Exception e) { 43 | e.printStackTrace(); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example2/WorkerActor2.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example2; 2 | 3 | import org.akka.essentials.supervisor.example2.MyActorSystem2.Result; 4 | 5 | import akka.actor.UntypedActor; 6 | import akka.event.Logging; 7 | import akka.event.LoggingAdapter; 8 | 9 | public class WorkerActor2 extends UntypedActor { 10 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 11 | private int state = 0; 12 | 13 | @Override 14 | public void preStart() { 15 | log.info("Starting WorkerActor2 instance hashcode # {}", 16 | this.hashCode()); 17 | } 18 | 19 | public void onReceive(Object o) throws Exception { 20 | if (o == null) { 21 | throw new NullPointerException("Null Value Passed"); 22 | } else if (o instanceof Integer) { 23 | Integer value = (Integer) o; 24 | if (value <= 0) { 25 | throw new ArithmeticException("Number equal or less than zero"); 26 | } else 27 | state = value; 28 | } else if (o instanceof Result) { 29 | getSender().tell(state); 30 | } else { 31 | throw new IllegalArgumentException("Wrong Argument"); 32 | } 33 | } 34 | 35 | @Override 36 | public void postStop() { 37 | log.info("Stopping WorkerActor2 instance hashcode # {}", 38 | this.hashCode()); 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /AkkaSupervisorExample/src/main/java/org/akka/essentials/supervisor/example2/WorkerActor1.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.supervisor.example2; 2 | 3 | import org.akka.essentials.supervisor.example2.MyActorSystem2.Result; 4 | 5 | import akka.actor.UntypedActor; 6 | import akka.event.Logging; 7 | import akka.event.LoggingAdapter; 8 | 9 | public class WorkerActor1 extends UntypedActor { 10 | LoggingAdapter log = Logging.getLogger(getContext().system(), this); 11 | private int state = 0; 12 | 13 | @Override 14 | public void preStart() { 15 | log.info("Starting WorkerActor1 instance hashcode # {}", 16 | this.hashCode()); 17 | } 18 | 19 | public void onReceive(Object o) throws Exception { 20 | if (o instanceof String) { 21 | throw new NullPointerException("Null Value Passed"); 22 | } else if (o instanceof Integer) { 23 | Integer value = (Integer) o; 24 | if (value <= 0) { 25 | throw new ArithmeticException("Number equal or less than zero"); 26 | } else 27 | state = value; 28 | } else if (o instanceof Result) { 29 | getSender().tell(state); 30 | } else { 31 | throw new IllegalArgumentException("Wrong Argument"); 32 | } 33 | } 34 | 35 | @Override 36 | public void postStop() { 37 | log.info("Stopping WorkerActor1 instance hashcode # {}", 38 | this.hashCode()); 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /DurableMailBox/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | DurableMailBox 6 | MailBox 7 | 0.0.1-SNAPSHOT 8 | jar 9 | 10 | MailBox 11 | http://maven.apache.org 12 | 13 | 14 | UTF-8 15 | 16 | 17 | 18 | 19 | com.typesafe.akka 20 | akka-actor 21 | 2.0.2 22 | 23 | 24 | com.typesafe.akka 25 | akka-file-mailbox 26 | 2.0.2 27 | 28 | 29 | com.typesafe.akka 30 | akka-mailboxes-common 31 | 2.0.2 32 | 33 | 34 | 35 | 36 | typesafe 37 | Typesafe Repository 38 | http://repo.typesafe.com/typesafe/releases/ 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/scala/org/akka/essentials/zeromq/example3/client/ClientActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example3.client 2 | import akka.actor.actorRef2Scala 3 | import akka.actor.Actor 4 | import akka.actor.ActorLogging 5 | import akka.util.duration.intToDurationInt 6 | import akka.zeromq.Connect 7 | import akka.zeromq.Frame 8 | import akka.zeromq.Listener 9 | import akka.zeromq.SocketType 10 | import akka.zeromq.ZMQMessage 11 | import akka.zeromq.ZeroMQExtension 12 | import akka.actor.Cancellable 13 | 14 | case class Tick 15 | 16 | class ClientActor extends Actor with ActorLogging { 17 | val reqSocket = ZeroMQExtension(context.system).newSocket(SocketType.Req, Connect("tcp://127.0.0.1:1234"), Listener(self)) 18 | 19 | var count = 0 20 | var cancellable: Cancellable = null 21 | override def preStart() { 22 | cancellable = context.system.scheduler.schedule(1 second, 1 second, self, Tick) 23 | } 24 | 25 | def receive: Receive = { 26 | case Tick => 27 | count += 1 28 | var payload = "Hi there! (" + context.self.hashCode() + ")->" 29 | reqSocket ! ZMQMessage(Seq(Frame(payload))) 30 | if (count == 5) { 31 | cancellable.cancel() 32 | } 33 | case m: ZMQMessage => 34 | var mesg = new String(m.payload(0)) 35 | 36 | log.info("recieved msg! {}", mesg) 37 | } 38 | } -------------------------------------------------------------------------------- /AkkaSerializerExample/src/main/java/org/akka/essentials/serializer/MySerializationApp.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.serializer; 2 | 3 | import akka.actor.ActorSystem; 4 | import akka.serialization.Serialization; 5 | import akka.serialization.SerializationExtension; 6 | import akka.serialization.Serializer; 7 | 8 | import com.typesafe.config.ConfigFactory; 9 | 10 | /** 11 | * Hello world! 12 | * 13 | */ 14 | public class MySerializationApp { 15 | 16 | public static void main(String[] args) { 17 | 18 | ActorSystem system = ActorSystem.create("MySerializableSys", 19 | ConfigFactory.load().getConfig("MySerializableSys")); 20 | 21 | Serialization serialization = SerializationExtension.get(system); 22 | 23 | MyMessage originalMessage = new MyMessage("Munish", 36, "Bangalore"); 24 | 25 | System.out.println("The original message is as " + originalMessage); 26 | 27 | // Get the Binded Serializer for it 28 | Serializer serializer = serialization 29 | .findSerializerFor(originalMessage); 30 | 31 | // Turn the object into bytes 32 | byte[] bytes = serializer.toBinary(originalMessage); 33 | 34 | // Turn the byte[] back into an object, 35 | MyMessage deSerializedMessage = (MyMessage) serializer.fromBinary( 36 | bytes, MyMessage.class); 37 | 38 | System.out.println("The de-serialized message is as " + deSerializedMessage); 39 | 40 | system.shutdown(); 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /AkkaWithZeroMQ/src/main/java/org/akka/essentials/zeromq/example4/PushActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.zeromq.example4; 2 | 3 | import akka.actor.ActorRef; 4 | import akka.actor.Cancellable; 5 | import akka.actor.UntypedActor; 6 | import akka.util.Duration; 7 | import akka.zeromq.Bind; 8 | import akka.zeromq.Frame; 9 | import akka.zeromq.Listener; 10 | import akka.zeromq.SocketOption; 11 | import akka.zeromq.ZMQMessage; 12 | import akka.zeromq.ZeroMQExtension; 13 | 14 | public class PushActor extends UntypedActor { 15 | public static final Object TICK = "TICK"; 16 | int count = 0; 17 | Cancellable cancellable; 18 | ActorRef pushSocket = ZeroMQExtension.get(getContext().system()) 19 | .newPushSocket( 20 | new SocketOption[] { new Bind("tcp://127.0.0.1:1237"), 21 | new Listener(getSelf()) }); 22 | 23 | @Override 24 | public void preStart() { 25 | 26 | cancellable = getContext() 27 | .system() 28 | .scheduler() 29 | .schedule(Duration.parse("1 second"), 30 | Duration.parse("1 second"), getSelf(), TICK); 31 | } 32 | 33 | @Override 34 | public void onReceive(Object message) throws Exception { 35 | if (message.equals(TICK)) { 36 | 37 | count++; 38 | pushSocket.tell(new ZMQMessage( 39 | new Frame("Hi there (" + count + ")"))); 40 | if (count == 5) 41 | cancellable.cancel(); 42 | } 43 | 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/transactor/example2/BankActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.transactor.example2 2 | 3 | import scala.concurrent.Await 4 | import scala.concurrent.duration._ 5 | 6 | import akka.actor.Actor 7 | import akka.actor.ActorLogging 8 | import akka.actor.OneForOneStrategy 9 | import akka.actor.Props 10 | import akka.actor.SupervisorStrategy._ 11 | import akka.pattern.ask 12 | import akka.transactor.CoordinatedTransactionException 13 | import akka.util.Timeout 14 | 15 | class BankActor extends Actor with ActorLogging { 16 | 17 | val transferActor = context.actorOf(Props[TransferActor], name = "TransferActor") 18 | implicit val timeout = Timeout(5 seconds) 19 | 20 | def receive = { 21 | case transfer: TransferMsg => 22 | transferActor ! transfer 23 | case balance: AccountBalance => 24 | val future = (transferActor ? balance).mapTo[AccountBalance] 25 | val account = Await.result(future, timeout.duration) 26 | println("Account #" + account.accountNumber + " , Balance #" + account.accountBalance) 27 | } 28 | 29 | override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) { 30 | case _: CoordinatedTransactionException => Resume 31 | case _: IllegalStateException => Resume 32 | case _: IllegalArgumentException => Stop 33 | case _: Exception => Escalate 34 | } 35 | } -------------------------------------------------------------------------------- /AkkaSTMExample/src/main/scala/org/akka/essentials/scala/stm/transactor/example/BankActor.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.scala.stm.transactor.example 2 | 3 | import akka.actor.SupervisorStrategy._ 4 | import akka.actor.Actor 5 | import akka.actor.AllForOneStrategy 6 | import akka.actor.Props 7 | import akka.transactor.CoordinatedTransactionException 8 | import akka.util.Timeout 9 | import scala.concurrent.Await 10 | import akka.actor.ActorLogging 11 | import akka.pattern.ask 12 | import scala.concurrent.duration._ 13 | 14 | 15 | class BankActor extends Actor with ActorLogging { 16 | 17 | val transferActor = context.actorOf(Props[TransferActor], name = "TransferActor") 18 | implicit val timeout = Timeout(5 seconds) 19 | 20 | def receive = { 21 | case transfer: TransferMsg => 22 | transferActor ! transfer 23 | case balance: AccountBalance => 24 | val future = ask(transferActor, balance).mapTo[AccountBalance] 25 | val account = Await.result(future, timeout.duration) 26 | log.info("Account #{} , Balance {}", account.accountNumber, 27 | account.accountBalance) 28 | } 29 | 30 | override val supervisorStrategy = AllForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) { 31 | case _: CoordinatedTransactionException => Resume 32 | case _: IllegalStateException => Resume 33 | case _: IllegalArgumentException => Stop 34 | case _: Exception => Escalate 35 | } 36 | } -------------------------------------------------------------------------------- /GridPatternExample/src/main/scala/org/akka/essentials/grid/controller/RemoteClientEventListener.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.grid.controller 2 | import akka.actor.ActorLogging 3 | import akka.actor.Actor 4 | import akka.actor.ActorRef 5 | import akka.remote.RemoteClientError 6 | import akka.remote.RemoteClientConnected 7 | import akka.remote.RemoteClientDisconnected 8 | import akka.remote.RemoteClientStarted 9 | import akka.remote.RemoteClientShutdown 10 | import akka.remote.RemoteClientWriteFailed 11 | 12 | class RemoteClientEventListener(val jobScheduler: ActorRef) extends Actor with ActorLogging { 13 | 14 | def receive: Receive = { 15 | case event: RemoteClientError => 16 | log.info("Received remote client error event from address " 17 | + event.getRemoteAddress()); 18 | jobScheduler ! new StopWorker(event.getRemoteAddress().toString); 19 | log.info("Cause of the event was {}", event.getCause()); 20 | case event: RemoteClientShutdown => 21 | log.info("Received remote client shutdown event from address-> " 22 | + event.getRemoteAddress().toString); 23 | jobScheduler ! new StopWorker(event.getRemoteAddress().toString); 24 | case event: RemoteClientWriteFailed => 25 | log.info("Received remote client write fail event from address " 26 | + event.getRemoteAddress()); 27 | jobScheduler ! new StopWorker(event.getRemoteAddress().toString); 28 | } 29 | } -------------------------------------------------------------------------------- /AkkaRouterExample/src/main/java/org/akka/essentials/java/router/example/scattergatherfirstcomplete/Example.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.java.router.example.scattergatherfirstcomplete; 2 | 3 | import org.akka.essentials.java.router.example.RandomTimeActor; 4 | 5 | import scala.concurrent.Await; 6 | import scala.concurrent.Future; 7 | import scala.concurrent.duration.Duration; 8 | import akka.actor.ActorRef; 9 | import akka.actor.ActorSystem; 10 | import akka.actor.Props; 11 | import akka.routing.ScatterGatherFirstCompletedRouter; 12 | import akka.util.Timeout; 13 | 14 | public class Example { 15 | 16 | /** 17 | * @param args 18 | * @throws Exception 19 | */ 20 | public static void main(String[] args) throws Exception { 21 | ActorSystem _system = ActorSystem 22 | .create("ScatterGatherFirstCompletedRouterExample"); 23 | ActorRef scatterGatherFirstCompletedRouter = _system.actorOf(new Props( 24 | RandomTimeActor.class) 25 | .withRouter(new ScatterGatherFirstCompletedRouter(5, Duration 26 | .create(2, "seconds"))), 27 | "myScatterGatherFirstCompletedRouterActor"); 28 | 29 | Timeout timeout = new Timeout(Duration.create(10, "seconds")); 30 | Future futureResult = akka.pattern.Patterns.ask( 31 | scatterGatherFirstCompletedRouter, "message", timeout); 32 | String result = (String) Await.result(futureResult, timeout.duration()); 33 | System.out.println(result); 34 | 35 | _system.shutdown(); 36 | 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /TypedActorExample/src/main/scala/org/akka/essentials/calculator/example1/CalculatorActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.calculator.example1 2 | 3 | import org.akka.essentials.calculator._ 4 | import akka.actor.ActorSystem 5 | import akka.actor.TypedActor 6 | import akka.dispatch.Await 7 | import akka.dispatch.Future 8 | import akka.util.duration._ 9 | import akka.actor.TypedProps 10 | import akka.actor.ActorRef 11 | 12 | object CalculatorActorSystem { 13 | 14 | def main(args: Array[String]): Unit = { 15 | 16 | val _system = ActorSystem("TypedActorsExample") 17 | 18 | val calculator: CalculatorInt = 19 | TypedActor(_system).typedActorOf(TypedProps[Calculator]()) 20 | 21 | calculator.incrementCount() 22 | 23 | // Invoke the method and wait for result 24 | val future = calculator.add(14, 6) 25 | var result = Await.result(future, 5 second) 26 | println("Result is " + result) 27 | 28 | // Invoke the method and wait for result 29 | var counterResult = calculator.incrementAndReturn() 30 | println("Result is " + counterResult.get) 31 | 32 | counterResult = calculator.incrementAndReturn() 33 | println("Result is " + counterResult.get) 34 | 35 | // Get access to the ActorRef 36 | val calActor: ActorRef = TypedActor(_system).getActorRefFor(calculator) 37 | // call actor with a message 38 | calActor.tell("Hi there") 39 | 40 | _system.shutdown() 41 | } 42 | 43 | } -------------------------------------------------------------------------------- /TypedActorExample/src/main/scala/org/akka/essentials/calculator/example3/CalculatorActorSystem.scala: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.calculator.example3 2 | import org.akka.essentials.calculator.CalculatorInt 3 | 4 | import akka.actor.ActorRef 5 | import akka.actor.ActorSystem 6 | import akka.actor.TypedActor 7 | import akka.actor.TypedProps 8 | import akka.dispatch.Await 9 | import akka.pattern.ask 10 | import akka.util.Timeout 11 | import akka.util.duration._ 12 | 13 | object CalculatorActorSystem { 14 | def main(args: Array[String]): Unit = { 15 | 16 | val _system = ActorSystem("TypedActorsExample") 17 | 18 | val calculator: CalculatorInt = 19 | TypedActor(_system).typedActorOf(TypedProps[SupervisorActor]()) 20 | 21 | // Get access to the ActorRef 22 | val calActor: ActorRef = TypedActor(_system).getActorRefFor(calculator) 23 | // call actor with a message 24 | calActor.tell("Hi there", calActor) 25 | 26 | //wait for child actor to get restarted 27 | Thread.sleep(500) 28 | 29 | // Invoke the method and wait for result 30 | implicit val timeout = Timeout(5 seconds) 31 | val future = (calActor ? 10).mapTo[Integer] // enabled by the “ask” import 32 | val result = Await.result(future, timeout.duration) 33 | 34 | println("Result from child actor->" + result) 35 | 36 | //wait before shutting down the system 37 | Thread.sleep(500) 38 | 39 | _system.shutdown() 40 | } 41 | } -------------------------------------------------------------------------------- /WordCountMapReduce/src/main/java/org/akka/essentials/wc/mapreduce/example/server/AggregateActor.java: -------------------------------------------------------------------------------- 1 | package org.akka.essentials.wc.mapreduce.example.server; 2 | 3 | import java.util.HashMap; 4 | import java.util.Iterator; 5 | import java.util.Map; 6 | 7 | import akka.actor.UntypedActor; 8 | 9 | public class AggregateActor extends UntypedActor { 10 | 11 | private Map finalReducedMap = new HashMap(); 12 | 13 | @Override 14 | public void onReceive(Object message) throws Exception { 15 | if (message instanceof Map) { 16 | @SuppressWarnings("unchecked") 17 | Map reducedList = (Map) message; 18 | aggregateInMemoryReduce(reducedList); 19 | } else if (message instanceof String) { 20 | if (((String) message).compareTo("DISPLAY_LIST") == 0) { 21 | //getSender().tell(finalReducedMap.toString()); 22 | System.out.println(finalReducedMap.toString()); 23 | 24 | } 25 | } 26 | } 27 | 28 | private void aggregateInMemoryReduce(Map reducedList) { 29 | 30 | Iterator iter = reducedList.keySet().iterator(); 31 | while (iter.hasNext()) { 32 | String key = iter.next(); 33 | if (finalReducedMap.containsKey(key)) { 34 | Integer count = reducedList.get(key) + finalReducedMap.get(key); 35 | finalReducedMap.put(key, count); 36 | } else { 37 | finalReducedMap.put(key, reducedList.get(key)); 38 | } 39 | 40 | } 41 | } 42 | 43 | } 44 | --------------------------------------------------------------------------------