Ik zou de driver
maken en connection
in de hoofdacteur. Ik zou dan de worker-acteurs instellen om een instantie van MongoConnection
. te nemen als een constructorargument, zodat elke werknemer een verwijzing naar de verbinding heeft (wat in feite een proxy is voor een pool van verbindingen). Dan, in iets als preStart
, laat de hoofdacteur de werkers maken (waarvan ik aanneem dat ze worden gerouteerd) en lever de verbinding als een arg. Een zeer vereenvoudigd voorbeeld zou er als volgt uit kunnen zien:
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 = {
...
}
}
Deze code is niet exact, maar het toont in ieder geval de concepten op hoog niveau die ik heb beschreven.