scala - 无法坚持演员
问题描述
我只想在演员出现故障时才在 Akka 中保留事件。我正在尝试以下代码来实现持久性。
package persistence
import akka.actor._
import akka.persistence._
case class Cmd(data: String)
case class Evt(data: String)
case class ExampleState(events: List[String] = Nil) {
def updated(evt: Evt): ExampleState = copy(evt.data :: events)
def size: Int = events.length
override def toString: String = events.reverse.toString
}
class ExamplePersistentActor extends PersistentActor {
var list = new java.util.ArrayList[String]
override def postStop (): Unit = {
println("inside postStop")
println(list.size())
import scala.collection.JavaConversions._
for( data <- list) {
persist(Evt(s"${data}-${numEvents}")) { event ⇒
println("persisting")
updateState(event)
context.system.eventStream.publish(event)
if (lastSequenceNr % snapShotInterval == 0 && lastSequenceNr != 0)
saveSnapshot(state)
}
}
}
override def persistenceId = "sample-id-1"
var state = ExampleState()
def updateState(event: Evt): Unit =
state = state.updated(event)
def numEvents =
state.size
val receiveRecover: Receive = {
case evt: Evt ⇒ updateState(evt)
case SnapshotOffer(_, snapshot: ExampleState) ⇒ state = snapshot
}
val snapShotInterval = 1000
val receiveCommand: Receive = {
case 'test =>
println("test")
case Cmd(data) ⇒
println(data)
list.add(data)
case "print" ⇒ println(state)
}
}
//#persistent-actor-example
object PersistentActorExample extends App {
val system = ActorSystem("example")
val persistentActor = system.actorOf(Props[ExamplePersistentActor], "persistentActor-4-scala")
persistentActor ! 'test
persistentActor ! Cmd("foo")
persistentActor ! Cmd("baz")
persistentActor ! Cmd("bar")
persistentActor ! Cmd("buzz")
persistentActor ! "print"
Thread.sleep(10000)
persistentActor ! PoisonPill
system.terminate()
}
任何人都可以在上面的代码中帮助我吗?这段代码是实现我想要的最佳方法还是我必须寻找其他方式?
我能想到的另一种方法是添加一个shutdown hook
,但我不知道我是否能够akka persistence
在shutdown hook
解决方案
推荐阅读
- cytoscape.js - 在 cytoscape 鼠标悬停时显示和隐藏节点信息
- php - 仅当 laravel 5.2 中的 status = '1' 时才登录用户
- excel - 如何在vba中填写activecell
- asp.net-core - 如何使用 httpClientFactory 配置证书
- javascript - 我可以在目标/特定浏览器选项卡中打开链接吗?
- apache-spark - 何时使用低级 API?
- python - 使用 complexType 节点搜索嵌套的 XSD
- java - 当我运行我的代码时,它在线程“main”java.lang.NoClassDefFoundError: org/opencv/core/Core 中显示错误异常
- windows - 将所有文件夹及其内容复制到特定位置,同时将 txt 列表与文件夹名称匹配
- python - 如何使用python提取图像和图像BBox坐标?