2017-05-27 64 views
1

我正在面對Cassandra驅動程序中的內存泄漏問題。檢查內存堆錯誤後,我可以看到有一個警告,說我正在爲每個物理集羣創建多個集羣/會話,但我不應該這麼做。因爲在我的Akka配置中,我最多有32個,我可以想象我正在創建32個羣集/會話實例,並且很可能是我強制內存泄漏。在Akka模型中共享Cassandra集羣/會話

我現在的問題是。我如何才能在演員之間分享一個Cassandra集羣/會話實例而不會中斷Akka的無形演員範例?

問候

+0

我在java中,但即使我將聚類和會話設置爲靜態,它也不會打破Akka的無法演變的狀態教條?這是我的問題的原因。我想用阿卡代理 – paul

回答

2

有一個單身(例如,你知道一類在結束的世界你的自舉實例只是一次),並構建您的行爲時傳遞的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創建卡桑德拉會話,指的是,但它一般不測試。

示例代碼是Scala,但在Java中同樣適用。

+0

恐怕不是那麼容易,我們用春天初始化演員的方式很老舊。但我明白你的想法。謝謝。無論如何是使用代理最糟糕的想法? – paul

+1

避免代理,因爲按照http://doc.akka.io/docs/akka/current/scala/agents.html 「代理已被棄用,並計劃在下一個主要版本中刪除」 –

+0

很高興知道,謝謝。你是否建議任何其他解決方案? – paul