Stateful actors
The behavior of the fetcher manager depends on whether it has work to give out to the fetchers:
If it has work to give, it needs to respond to
GiveMeWork
messages with aFetcher.Fetch
messageIf it does not have work, it must ignore the
GiveMeWork
messages and, if work gets added, it must send aWorkAvailable
message to the fetchers
Encoding the notion of state is straightforward in Akka. We specify different receive
methods and switch from one to the other depending on the state. We will define the following receive
methods for our fetcher manager, corresponding to each of the states:
// receive method when the queue is empty def receiveWhileEmpty: Receive = { ... } // receive method when the queue is not empty def receiveWhileNotEmpty: Receive = { ... }
Note that we must define the return type of the receive methods as Receive
. To switch the actor from one method to the other, we can use context.become(methodName)
. Thus, for instance, when the last login name is popped...