在 Akka 模型中分享 Cassandra cluster/session

Share Cassandra cluster/session in Akka model

我在 Cassandra 驱动程序中遇到内存泄漏问题。检查内存不足堆错误后,我可以看到一条警告说我正在为每个物理集群创建多个 cluster/session,我不应该这样做。由于在我的 Akka 配置中我最多有 32 个,我可以想象我正在创建 32 个 cluster/sessions 实例,而且很可能我正在强制内存泄漏。

我现在的问题是。我怎样才能在参与者之间共享一个 cluster/session Cassandra 的实例而不破坏 Akka 的不变参与者范式?

此致

有一个单例(例如,一个 class 你知道在你的世界末日 bootstrap 只实例化一次)并在构建你的 Props 时将其传递给 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。