在 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。
我在 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。