Skip to content

Instantly share code, notes, and snippets.

@diggzhang
Created September 13, 2017 03:13
Show Gist options
  • Save diggzhang/34080589286159a6d94af073a9c33063 to your computer and use it in GitHub Desktop.
Save diggzhang/34080589286159a6d94af073a9c33063 to your computer and use it in GitHub Desktop.
Communication between actors
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