如何在没有根本原因的情况下调试Akka持久性中的JournalFilureException
我正在尝试调试以下错误消息,因为错误不会打印根本原因,所以很难调试这里的问题。我试图改变超时,但问题似乎并没有恢复如何在没有根本原因的情况下调试Akka持久性中的JournalFilureException,akka,akka-persistence,typesafe,Akka,Akka Persistence,Typesafe,我正在尝试调试以下错误消息,因为错误不会打印根本原因,所以很难调试这里的问题。我试图改变超时,但问题似乎并没有恢复 Supervisor StopSupervisor saw failure: Exception during recovery. Last known sequence number [0]. PersistenceId [first], due to: Replay timed out, didn't get event within [60000 milliseconds
Supervisor StopSupervisor saw failure: Exception during recovery. Last known sequence number [0]. PersistenceId [first], due to: Replay timed out, didn't get event within [60000 milliseconds], highest sequence number seen [0]
akka.persistence.typed.internal.JournalFailureException: Exception during recovery. Last known sequence number [0]. PersistenceId [first], due to: Replay timed out, didn't get event within [60000 milliseconds], highest sequence number seen [0]
at akka.persistence.typed.internal.ReplayingEvents.onRecoveryFailure(ReplayingEvents.scala:263)
在到达超时之前,我看到以下日志。这是否意味着我的配置有问题
2020-11-20 12:21:55,999 WAR Persistence No default snapshot store configured! To configure a default snapshot-store plugin set the `akka.persistence.snapshot-store.plugin` key. For details see 'reference.conf'
2020-11-20 12:21:56,070 WAR HikariConfig slick.db - using dataSourceClassName and ignoring jdbcUrl.
2020-11-20 12:21:56,073 INF HikariDataSource slick.db - Starting...
2020-11-20 12:21:56,109 INF HikariDataSource slick.db - Start completed.
这是我的application.conf
akka {
loglevel = DEBUG
persistence {
journal.plugin = "jdbc-journal"
snapshot-store.plugin = "jdbc-snapshot-store"
}
}
jdbc-journal {
slick = ${slick}
}
jdbc-snapshot-store {
slick = ${slick}
}
jdbc-read-journal {
slick = ${slick}
}
slick {
profile = "slick.jdbc.MySQLProfile$"
db {
dataSourceClass = "slick.jdbc.DriverDataSource"
driver = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/"
user = nilu
password = "password"
}
}
使用
onPersistFailure
方法。如果持久化失败,则调用此方法。这个演员会被压垮的。最佳做法是在一段时间后再次启动演员,并使用退避主管
并使用onpersistened
方法。如果日志未能持久化事件,则调用此方法。演员继续表演。()
class MyPersistentActor extends PersistentActor with ActorLogging {
override def persistenceId: String = ???
override def receiveCommand: Receive = ???
override def receiveRecover: Receive = ???
override def onPersistFailure(cause: Throwable, event: Any, seqNr: Long): Unit = {
log.error(s"fail to persist $event because of: $cause")
super.onPersistFailure(cause, event, seqNr)
}
override def onPersistRejected(cause: Throwable, event: Any, seqNr: Long): Unit = {
log.error(s"persist rejected for $event because of: $cause")
super.onPersistRejected(cause, event, seqNr)
}
}