我有一个非常简单的数据库编写器角色,只用于用Casbah向Mongo写入一些条目,但它在连接到DB后拒绝(没有错误)接收任何消息。如果我要从actor中移除client
和db
vals,它将接收消息。我还试图封装到某个对象的连接,但在连接到DB之后仍然无法工作。
class DBWriter extends Actor with ActorLogging {
val client = MongoClient(host, port)
val db = client(dbName)
def receive = {
case Write(collection, entry) => db(collection).save(entry)
}
}
class StatisticsActor extends Actor with ActorLogging {
val writer = context.actorOf(Props[DBWriter], "dbWriterActor")
def receive = {
case mes: SM => writer ! Write(....)
case NoConnection => writer ! Write(....)
case NCTime(time) => writer ! Write(....)
....
}
....
}
如何修复?
发现问题。这很简单,问题出在线程上,演员们没有足够的时间连接到mongo并对其进行写入,所有的测试都通过了。