Je créerais le driver
et connection
dans l'acteur principal. Je configurerais ensuite les acteurs de travail pour prendre une instance de MongoConnection
en tant qu'argument de constructeur afin que chaque travailleur ait une référence à la connexion (qui est en réalité un proxy vers un pool de connexions). Ensuite, dans quelque chose comme preStart
, demandez à l'acteur principal de créer les travailleurs (qui, je suppose, sont routés) et de fournir la connexion en tant qu'argument. Un exemple très simplifié pourrait ressembler à ceci :
class MongoMaster extends Actor{
val driver = new MongoDriver
val connection = driver.connection(List("localhost"))
override def preStart = {
context.actorOf(Props(classOf[MongoWorker], connection).withRouter(FromConfig()))
}
def receive = {
//do whatever you need here
...
}
}
class MongoWorker(conn:MongoConnection) extends Actor{
def receive = {
...
}
}
Ce code n'est pas exact, mais au moins il montre les concepts de haut niveau que j'ai décrits.