问题描述
我正在尝试将 AKKA 持久性与 JDBC 插件一起使用。但是,在试验持久性 Actor 时,我面临的问题是我的持久性 Actor 没有收到它应该收到的消息。
这是我用于 JDBC 插件的 application.conf 文件。
akka {
loglevel = DEBUG
actor {
#provider = cluster
}
persistence {
journal.plugin = "jdbc-journal"
snapshot-store.plugin = "jdbc-snapshot-store"
}
}
jdbc-journal {
slick = ${slick}
}
# the akka-persistence-snapshot-store in use
jdbc-snapshot-store {
slick = ${slick}
}
jdbc-read-journal {
slick = ${slick}
}
slick {
profile = "slick.jdbc.MysqLProfile$"
dataSourceClass = "slick.jdbc.DriverDataSource"
db {
dataSourceClass = "slick.jdbc.DriverDataSource"
driver = "com.MysqL.cj.jdbc.Driver"
url = "jdbc:MysqL://localhost:3306/db_persistence"
user = "root"
password = ""
numThreads = 5
maxConnections = 5
minConnections = 1
}
}
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 ExampleActor extends PersistentActor {
override def persistenceId = "sample-id-1"
var state = ExampleState()
def updateState(event: Evt): Unit = {
state = state.updated(event)
}
def numEvents =
state.size
override def receiveRecover: Receive = {
case evt: Evt => updateState(evt)
case SnapshotOffer(_,snapshot: ExampleState) => state = snapshot
}
val snapShotInterval = 1000
val receiveCommand: Receive = {
case Cmd(data) => {
println("in the command code block")
persist(Evt(s"${data}-${numEvents}")) { event => {
updateState(event)
context.system.eventStream.publish(event)
if (lastSequenceNr % snapShotInterval == 0 && lastSequenceNr != 0)
saveSnapshot(state)
}
}
}
case "print"=>println(state)
}
}
最后,我发现问题的地方。
"The persistent actor" should {
"Receive Command" in {
val persistentActor = system.actorOf(Props[ExampleActor](),"persistentActorOne")
Thread.sleep(2000)
println("before the send")
persistentActor ! Cmd("foo")
persistentActor ! Cmd("bar")
persistentActor ! Cmd("fizz")
persistentActor ! Cmd("buzz")
persistentActor ! "print"
Thread.sleep(10000)
println("after messages should be sent and received")
}
}
}
有人能看到我的持久演员收不到我的消息/命令的原因吗?
提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)