I'm playing with "stats" example to make some kind of POC:
and have the following configuration:
application.conf:
akka.actor.deployment {
/singleton/statsService/statsWorker {
router = consistent-hashing-pool
nr-of-instances = 100
cluster {
enabled = on
max-nr-of-instances-per-node = 3
allow-local-routees = on
use-role = backend
}
}
}
I have 3 nodes one with the role "frontend" and two with the role "backend":
I'm sending the following message:
case class TestMessage(id:Int,msg:String) extends ConsistentHashable {
override def consistentHashKey: Any = id.toString
}
now I have StatsService actor:
class StatsService extends Actor{
override def preStart(): Unit = println("starting singleton statsService")
val statsWorker = context.actorOf(Props[StatsWorker],"statsWorker")
override def receive ={
case testMsg:TestMessage => statsWorker ! testMsg
case _ => println("unhelded")
}
}
Now statsWorker:
class StatsWorker extends Actor{
override def preStart(): Unit = println("Start new Stats Worker!!!")
override def receive = {
case TestMessage(id,msg) => println(id)
case _ => println("unhelded")
}
}
Now on each node I have the following code:
val nodeRole = configuration.getStringList("akka.cluster.roles").get(0)
if (nodeRole == "backend") {
system.actorOf(ClusterSingletonManager.props(
singletonProps = Props[StatsService], singletonName = "statsService",
terminationMessage = PoisonPill, role = Some("backend")),
name = "singleton")
} else if (nodeRole=="frontend"){
val statsServiceProxy =
system.actorOf(ClusterSingletonProxy.props(singletonPath =
"user/singleton/statsService",
role = Some("backend")), name =
"statsServiceProxy")
for (a <- 1 to 10000) {
statsServiceProxy ! TestMessage(a, "bla")
}
}
*Now I see the following concerns:*
1) My "statsService" singleton created on leader and seems to be single
instance in cluster, which is OK.
2) Only one instance of statsWorker created, but as far as I understand i
supposed to have 3 instances on each node.
3) All 10k messages are handled by single instance of "statsWorker" which is
not OK.
4) it seems like I'm using simple singleton pattern and it looks like my pool
is not working.
What is wrong? How can I balance between two "backend" nodes?
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.