Created
September 13, 2017 03:13
-
-
Save diggzhang/34080589286159a6d94af073a9c33063 to your computer and use it in GitHub Desktop.
Communication between actors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.packt.chapter1 | |
import akka.actor.{Actor, ActorRef, ActorSystem, Props} | |
import scala.util.Random._ | |
/** | |
* Which contains messages to be sent to the actors. | |
* Actors will use these messages for communication. | |
*/ | |
object Messages { | |
case class Done(randomNumber: Int) | |
case object GiveMeRandomNumber | |
case class Start(actorRef: ActorRef) | |
} | |
/** | |
* Receives the message `GiveMeRandomNumber` | |
*/ | |
class RandomNumberGeneratorActor extends Actor { | |
import Messages._ | |
override def receive: Receive = { | |
case GiveMeRandomNumber => | |
println("received a message to generate a random integer") | |
val randomNumber = nextInt | |
sender ! Done(randomNumber) | |
} | |
} | |
/** | |
* sends the message to `RandomNumberGenerator`, | |
* and receives the result in case of `Done`. | |
*/ | |
class QueryActor extends Actor { | |
import Messages._ | |
override def receive: Receive = { | |
case Start(actorRef) => println(s"send me the next random number") | |
actorRef ! GiveMeRandomNumber | |
case Done(randomNumber) => | |
println(s"received a random number $randomNumber") | |
} | |
} | |
object Communication extends App { | |
import Messages._ | |
val actorSystem = ActorSystem("HelloAkka") | |
val randomNumberGenerator = actorSystem.actorOf(Props[RandomNumberGeneratorActor], "randomNumberGeneratorActor") | |
val queryActor = actorSystem.actorOf(Props[QueryActor], "queryActor") | |
queryActor ! Start(randomNumberGenerator) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment