在Akka模型中分享Cassandra集群/会话

时间:2017-05-27 19:25:47

标签: java cassandra akka cassandra-2.0

我在Cassandra驱动程序中遇到内存泄漏问题。在检查了内存堆错误之后,我可以看到有一个警告说我正在为每个phisical集群创建多个集群/会话,我不应该这样做。因为在我的Akka配置中我最多有32个,我可以想象我正在创建32个集群/会话实例,并且很可能我正在强制内存泄漏。

我现在的问题是。我怎样才能在演员之间只分享一个Cassandra集群/会话的实例而不打破Akka不可思议的演员范式?

问候

1 个答案:

答案 0 :(得分:2)

有一个单例(例如,你知道的一个类只在你的世界末尾引导程序中实例化一次)并在构造你的actor时在Props中传递它。

object Main extends App {
   val services = new Services
   // ...
   val actor1 = system.actorOf(Props(classOf[MyActor], services), "actor1")
   val actor2 = system.actorOf(Props(classOf[MyActor], services), "actor2")
}

class Services {
   val cassandraSession = ??? // ... however you create it
}

你也可以从object创建一个Cassandra会话并参考它,但它通常不太可测试。

示例代码是Scala,但同样的方法适用于Java。