Utworzyłbym driver
i connection
w głównym aktorze. Następnie ustawiłbym aktorów roboczych, aby wzięli instancję MongoConnection
jako argument konstruktora, aby każdy pracownik miał odniesienie do połączenia (które w rzeczywistości jest proxy do puli połączeń). Następnie w coś takiego jak preStart
, poproś głównego aktora o utworzenie pracowników (które, jak zakładam, są routowane) i dostarczenie połączenia jako arg. Bardzo uproszczony przykład może wyglądać tak:
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 = {
...
}
}
Ten kod nie jest dokładny, ale przynajmniej pokazuje koncepcje wysokiego poziomu, które opisałem.