Routing

In the previous example, we created four fetchers and dispatched messages to them, one after the other. We have a pool of identical actors among which we distribute tasks. Manually routing the messages to the right actor to maximize the utilization of our pool is painful and error-prone. Fortunately, Akka provides us with several routing strategies that we can use to distribute work among our pool of actors. Let's rewrite the previous example with automatic routing. You can find the code examples for this section in the chap09/fetchers_routing directory in the sample code provided with this book (https://github.com/pbugnion/s4ds). We will reuse the same definition of Fetchers and its companion object as we did in the previous section.

Let's start by importing the routing package:

// FetcherDemo.scala
import akka.routing._

A router is an actor that forwards the messages that it receives to its children. The easiest way to define a pool of actors is to tell Akka to create a router and pass it a Props object for its children. The router will then manage the creation of the workers directly. In our example (we will only comment on the parts that differ from the previous example in the text, but you can find the full code in the fetchers_routing directory with the examples for this chapter), we replace the custom Fetcher creation code with the following:

// FetcherDemo.scala

// Create a router with 4 workers of props Fetcher.props()
val router = system.actorOf(
  RoundRobinPool(4).props(Fetcher.props(token))
)

We can then send the fetch messages directly to the router. The router will route the messages to the children in a round-robin manner:

List("odersky", "derekwyatt", "rkuhn", "tototoshi").foreach { 
  login => router ! Fetch(login)
}

We used a round-robin router in this example. Akka offers many different types of routers, including routers with dynamic pool size, to cater to different types of load balancing. Head over to the Akka documentation for a list of all the available routers, at http://doc.akka.io/docs/akka/snapshot/scala/routing.html.

..................Content has been hidden....................

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