Verify config override of router nr-of-instances. See #1607
* It wasn't a bug. I think the confusion came from config without 'router' defined. * Added test * Added some clarification to docs
This commit is contained in:
parent
0d4763c3b0
commit
762a6017e9
4 changed files with 34 additions and 5 deletions
|
|
@ -15,6 +15,15 @@ import com.typesafe.config.ConfigFactory
|
||||||
|
|
||||||
object RoutingSpec {
|
object RoutingSpec {
|
||||||
|
|
||||||
|
val config = """
|
||||||
|
akka.actor.deployment {
|
||||||
|
/router1 {
|
||||||
|
router = round-robin
|
||||||
|
nr-of-instances = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
class TestActor extends Actor {
|
class TestActor extends Actor {
|
||||||
def receive = {
|
def receive = {
|
||||||
case _ ⇒
|
case _ ⇒
|
||||||
|
|
@ -31,7 +40,7 @@ object RoutingSpec {
|
||||||
}
|
}
|
||||||
|
|
||||||
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
|
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
|
||||||
class RoutingSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
|
class RoutingSpec extends AkkaSpec(RoutingSpec.config) with DefaultTimeout with ImplicitSender {
|
||||||
|
|
||||||
import akka.routing.RoutingSpec._
|
import akka.routing.RoutingSpec._
|
||||||
|
|
||||||
|
|
@ -87,6 +96,18 @@ class RoutingSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
|
||||||
Await.ready(doneLatch, 1 seconds)
|
Await.ready(doneLatch, 1 seconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"use configured nr-of-instances when FromConfig" in {
|
||||||
|
val router = system.actorOf(Props[TestActor].withRouter(FromConfig), "router1")
|
||||||
|
Await.result(router ? CurrentRoutees, 5 seconds).asInstanceOf[RouterRoutees].routees.size must be(3)
|
||||||
|
system.stop(router)
|
||||||
|
}
|
||||||
|
|
||||||
|
"use configured nr-of-instances when router is specified" in {
|
||||||
|
val router = system.actorOf(Props[TestActor].withRouter(RoundRobinRouter(nrOfInstances = 2)), "router1")
|
||||||
|
Await.result(router ? CurrentRoutees, 5 seconds).asInstanceOf[RouterRoutees].routees.size must be(3)
|
||||||
|
system.stop(router)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"no router" must {
|
"no router" must {
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ akka {
|
||||||
# supplied in the source code (overridable using create-as below)
|
# supplied in the source code (overridable using create-as below)
|
||||||
# - routees.paths: will look the paths up using actorFor and route to
|
# - routees.paths: will look the paths up using actorFor and route to
|
||||||
# them, i.e. will not create children
|
# them, i.e. will not create children
|
||||||
|
# - resizer: dynamically resizable number of routees as specified in resizer below
|
||||||
router = "from-code"
|
router = "from-code"
|
||||||
|
|
||||||
# number of children to create in case of a non-direct router; this setting
|
# number of children to create in case of a non-direct router; this setting
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,9 @@ You can also give the router already created routees as in:
|
||||||
When you create a router programatically you define the number of routees *or* you pass already created routees to it.
|
When you create a router programatically you define the number of routees *or* you pass already created routees to it.
|
||||||
If you send both parameters to the router *only* the latter will be used, i.e. ``nrOfInstances`` is disregarded.
|
If you send both parameters to the router *only* the latter will be used, i.e. ``nrOfInstances`` is disregarded.
|
||||||
|
|
||||||
*It is also worth pointing out that if you define the number of routees in the configuration file then this
|
*It is also worth pointing out that if you define the number of routees (``nr-of-instances`` or ``routees``) in
|
||||||
value will be used instead of any programmatically sent parameters.*
|
the configuration file then this value will be used instead of any programmatically sent parameters, but you must
|
||||||
|
also define the ``router`` property in the configuration.*
|
||||||
|
|
||||||
Once you have the router actor it is just to send messages to it as you would to any actor:
|
Once you have the router actor it is just to send messages to it as you would to any actor:
|
||||||
|
|
||||||
|
|
@ -189,6 +190,9 @@ This is an example of how to programatically create a resizable router:
|
||||||
|
|
||||||
.. includecode:: code/akka/docs/jrouting/RouterViaProgramExample.java#programmaticRoutingWithResizer
|
.. includecode:: code/akka/docs/jrouting/RouterViaProgramExample.java#programmaticRoutingWithResizer
|
||||||
|
|
||||||
|
*It is also worth pointing out that if you define the ``router`` in the configuration file then this value
|
||||||
|
will be used instead of any programmatically sent parameters.*
|
||||||
|
|
||||||
Custom Router
|
Custom Router
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,9 @@ You can also give the router already created routees as in:
|
||||||
When you create a router programatically you define the number of routees *or* you pass already created routees to it.
|
When you create a router programatically you define the number of routees *or* you pass already created routees to it.
|
||||||
If you send both parameters to the router *only* the latter will be used, i.e. ``nrOfInstances`` is disregarded.
|
If you send both parameters to the router *only* the latter will be used, i.e. ``nrOfInstances`` is disregarded.
|
||||||
|
|
||||||
*It is also worth pointing out that if you define the number of routees in the configuration file then this
|
*It is also worth pointing out that if you define the number of routees (``nr-of-instances`` or ``routees``) in
|
||||||
value will be used instead of any programmatically sent parameters.*
|
the configuration file then this value will be used instead of any programmatically sent parameters, but you must
|
||||||
|
also define the ``router`` property in the configuration.*
|
||||||
|
|
||||||
Once you have the router actor it is just to send messages to it as you would to any actor:
|
Once you have the router actor it is just to send messages to it as you would to any actor:
|
||||||
|
|
||||||
|
|
@ -190,6 +191,8 @@ This is an example of how to programatically create a resizable router:
|
||||||
|
|
||||||
.. includecode:: code/akka/docs/routing/RouterViaProgramExample.scala#programmaticRoutingWithResizer
|
.. includecode:: code/akka/docs/routing/RouterViaProgramExample.scala#programmaticRoutingWithResizer
|
||||||
|
|
||||||
|
*It is also worth pointing out that if you define the ``router`` in the configuration file then this value
|
||||||
|
will be used instead of any programmatically sent parameters.*
|
||||||
|
|
||||||
Custom Router
|
Custom Router
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue