使用持久性actor将消息持久存储到SQL Server数据库中。初始消息格式如下所示。系统以这种格式运行几次,其中许多消息都是持久的。目前我更改了消息格式以包含少量属性,如下所示。有人能告诉我如何解决这个问题吗?
我目前面临的问题是,在恢复初始保留消息时,新的更改失败并发出如下错误。
“重播persistenceId [tz-persistent-factory]事件时的持久性失败。最后已知的序列号[0]“
public class PlacedMissionDataCommand : IEntityActorMessage
{
public PlacedMissionDataCommand(int trafficzoneId, int missionId, DateTime finishedTime)
{
TrafficzoneId = trafficzoneId;
MissionId = missionId;
FinishedTime = finishedTime;
TaskGroupId = taskGroupId;
TaskGroupActivated = taskGroupActivated;
TaskGroupCreated = taskGroupCreated;
TestData = testData;
}
public int TrafficzoneId { get; }
public int MissionId { get; private set; }
public DateTime FinishedTime { get; }
public string EntityId => TrafficzoneId.ToString();
}
完成更改以包含少数属性后
public class PlacedMissionDataCommand : IEntityActorMessage
{
public PlacedMissionDataCommand(int trafficzoneId, int missionId, DateTime finishedTime, int taskGroupId, DateTime? taskGroupActivated, DateTime? taskGroupCreated)
{
TrafficzoneId = trafficzoneId;
MissionId = missionId;
FinishedTime = finishedTime;
TaskGroupId = taskGroupId;
TaskGroupActivated = taskGroupActivated;
TaskGroupCreated = taskGroupCreated;
}
public int TrafficzoneId { get; }
public int MissionId { get; private set; }
public DateTime FinishedTime { get; }
public int TaskGroupId { get; }
public DateTime? TaskGroupActivated { get; }
public DateTime? TaskGroupCreated { get; }
public string EntityId => TrafficzoneId.ToString();
}
答案 0 :(得分:2)
这并不意外。您决定将合同(事件架构)更改为没有向后兼容性的合同(在序列化方面) - 已经存储的事件。这不是Akka特定的问题,而是没有任何事件版本控制策略的更广泛的问题。
我前段时间written a post描述了如何在Akka.NET中应用版本化以实现向后不兼容的模式 - 以及为什么不应该使用默认的序列化器。
如果您需要更完整的问题讲座,Greg Young还wrote a book了解事件源系统中的事件版本。