假设我从这样的 Akka Persistence 系统开始:
case class MyMessage(x: Int)
class MyProcessor extends Processor {
def receive = {
case Persistent(m @ MyMessage) => m.x
//...
}
}
然后有一天我把它改成这样:
case class MyMessage(x: Int, y: Int)
class MyProcessor extends Processor {
def receive = {
case Persistent(m @ MyMessage) => m.x + m.y
//...
}
}
在我部署新系统后,当实例MyProcessor
尝试恢复其状态时,日志消息将属于前一个案例类。因为它期待后一种类型,它会抛出一个OnReplayFailure
,使处理器无用。问题是:如果我们假设缺席y
可以等于0
(或其他)是否有最佳实践来克服这个问题?例如,也许implicit
在恢复时使用 an 从前者消息转换为后者?