如何在没有根本原因的情况下调试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)
    }
  }