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 a Fetcher.Fetch message
  • If it does not have work, it must ignore the GiveMeWork messages and, if work gets added, it must send a WorkAvailable 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 off the queue, we can transition to using the receiveWhileEmpty method with context.become(receiveWhileEmpty). We set the initial state by assigning receiveWhileEmpty to the receive method:

def receive = receiveWhileEmpty
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.143.205.136