要连接到mongo数据库,在我们的非风暴应用程序中,我们将创建Mongo类的单例实例并在整个应用程序中共享它
想知道在风暴框架中实现Mongo连接池的正确方法是什么?
我们尝试的选项:
我们有一个从Mongo数据库读取的spout。我们只是将单例Mongo类放在spout中并在open方法中初始化它? - 但是这种方法使得如果需要的话就不可能将Mongo实例共享到一个螺栓上
我想对正确的做法有一些指示。
答案 0 :(得分:1)
风暴中的连接池有点复杂,因为你需要考虑几件事情:
所以,不要过分担心它。像往常一样继续在你的Spouts和Bolts中使用你班级的Singleton实例(比如@ bridiver'答案)。如果他们碰巧共享同一个JVM,那么他们将共享同一个池,你就可以了!
关于初始化,这是我的工作:
open
(针对鲸鱼嘴)或prepare
(针对弩)方法中初始化您的连接答案 1 :(得分:1)
缺少拓扑初始化方法可能会有问题。我们所做的是在单例上调用一个方法,该方法在使用它的任何螺栓的prepare方法(获取配置)中初始化连接池。我们使用带有标志的synchronized方法来确保实际初始化仅执行一次。调用同步方法会有很小的性能损失,但在大多数情况下,它不是问题。
Mongo.create_connection_pool(conf)
和方法
public static synchronized void create_connection_pool(Config conf) {
if (connected)
return;
else {
initialize connection...
connected = true;
}
}