Accessing the sender of a message
When our fetcher manager receives a GiveMeWork
request, we will need to send work back to the correct fetcher. We can access the actor who sent a message using the sender
method, which is a method of Actor
that returns the ActorRef
corresponding to the actor who sent the message currently being processed. The case
statement corresponding to GiveMeWork
in the fetcher manager is therefore:
def receive = {
case GiveMeWork =>
login = // get next login to fetch
sender ! Fetcher.Fetch(login)
...
}
As sender
is a method, its return value will change for every new incoming message. It should therefore only be used synchronously with the receive
method. In particular, using it in a future is dangerous:
def receive = { case ...
Get Scala: Guide for Data Science Professionals now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.