gpt4 book ai didi

mongodb - Akka和ReactiveMongo

转载 作者:行者123 更新时间:2023-12-03 15:59:17 25 4
gpt4 key购买 nike

我正在尝试找到最佳方法,以使参与者与集群 worker 共享相同的连接池。我有以下结构:

主 Actor -> worker Actor (最多100个或更多)-> MongoDB

我想在worker和MongoDB之间放置reactmongo,但是我不确定如何在所有参与者之间提供连接池共享。

根据reactivemongo文档:

A MongoDriver instance manages an actor system; a connection manages a pool of connections. In general, MongoDriver or create a MongoConnection are never instantiated more than once. You can provide a list of one ore more servers; the driver will guess if it's a standalone server or a replica set configuration. Even with one replica node, the driver will probe for other nodes and add them automatically.



我应该只在Master actor中创建它,然后将其与每个消息捆绑在一起吗?
因此,这将在Master actor中进行:
val driver = new MongoDriver
val connection = driver.connection(List("localhost"))

然后,我在消息中将连接传递给 Actor 。还是应该查询每个Work Actor中的连接并仅在消息中传递驱动程序?

任何帮助,我们将不胜感激。
谢谢。

最佳答案

我将在主 Actor 中创建driverconnection。然后,我将设置工作人员角色,以MongoConnection的实例作为构造函数参数,以便每个工作人员都有对连接的引用(实际上是对连接池的代理)。然后,使用preStart之类的方法,让主 Actor 创建工作线程(我假设这些工作线程已路由),并将连接作为arg提供。一个非常简化的示例可能如下所示:

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 = {
...
}
}

这段代码并不准确,但是至少它显示了我所描述的高级概念。

关于mongodb - Akka和ReactiveMongo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18638570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com