Java Storm拓扑的Mongo连接池
要连接到mongo数据库,在非storm应用程序中,我们将创建mongo类的单例实例,并在应用程序中共享它Java Storm拓扑的Mongo连接池,java,mongodb,apache-storm,Java,Mongodb,Apache Storm,要连接到mongo数据库,在非storm应用程序中,我们将创建mongo类的单例实例,并在应用程序中共享它 想知道在storm框架中实现Mongo连接池的正确方法是什么吗? 我们尝试过的选项: 我们有一个从Mongo数据库读取数据的喷口。我们只是将singleton Mongo类放在喷口中,并在open方法中初始化它?-但这种方法使得在需要时无法将Mongo实例共享给bolt。 想要有正确的方式做一些指针。 风暴中的连接池有点复杂,因为你需要考虑两件事: 您正在群集环境中运行->多台计算机需
想知道在storm框架中实现Mongo连接池的正确方法是什么吗?
我们尝试过的选项:
我们有一个从Mongo数据库读取数据的喷口。我们只是将singleton Mongo类放在喷口中,并在open方法中初始化它?-但这种方法使得在需要时无法将Mongo实例共享给bolt。
想要有正确的方式做一些指针。
风暴中的连接池有点复杂,因为你需要考虑两件事:
打开
(用于喷嘴)或准备
(用于螺栓)方法中初始化连接缺少拓扑初始化方法可能会有问题。我们所做的是在一个单例上调用一个方法,该方法在使用它的任何螺栓的prepare方法中初始化连接池(以获取配置)。我们使用带有标志的同步方法来确保实际初始化只执行一次。调用synchronized方法会有很小的性能损失,但在大多数情况下这不是问题
Mongo.create_connection_pool(conf)
方法呢
public static synchronized void create_connection_pool(Config conf) {
if (connected)
return;
else {
initialize connection...
connected = true;
}
}
我认为austin指的是池初始化本身。这取决于你是否能自动处理的实现。@Bridriver说得好,我明白你的意思。我更新了我的答案,以包括我对初始化所做的操作。现在我不使用单例,每个喷口/螺栓管理自己的连接。每个Storm执行器在单独的JVM中运行?不是工人在一个单独的地方工作吗JVM@user2759265哦,你是对的。。是工人。我更新了答案。