使用方法 markDeleted() 删除聚合后,使用相同聚合标识符处理请求的正确方法是什么?
markDeleted() 方法将标记和聚合标记为已删除,然后当使用相同的聚合标识符尝试创建事件时,将引发异常。
这只是尝试/捕获的情况吗?
如果我需要更清楚,请告诉我。
提前致谢,
PS)嗨阿拉德!:)
使用方法 markDeleted() 删除聚合后,使用相同聚合标识符处理请求的正确方法是什么?
markDeleted() 方法将标记和聚合标记为已删除,然后当使用相同的聚合标识符尝试创建事件时,将引发异常。
这只是尝试/捕获的情况吗?
如果我需要更清楚,请告诉我。
提前致谢,
PS)嗨阿拉德!:)
我建议不要重用已删除聚合实例的聚合标识符。
当你做这样的事情时,Axon 可以有两种方式: 1. 旧的聚合标识符在将实例化聚合的命令中重用(我喜欢称它们为“构造函数命令处理程序”)。在这种情况下,事件存储引擎中会抛出一个异常,说明给定的事件已经存在。2. 旧的聚合标识符被重用于执行某些决策的命令。换句话说,此命令将@TargetAggregateIdentifier
注释绑定到旧的聚合标识符。在这种情况下,聚合将是事件源(假设您正在执行事件源),直到将聚合标记为“已删除”的事件。然后你会在你的脸上看到另一个异常,指出这是不正确的行为。
如果您确实需要重用该聚合标识符,则必须删除已删除的旧聚合的事件;很可能不是你想做的事情。
因此,最好使用 a UUID
,它(几乎)可以保证您获得唯一的聚合标识符。这样您就可以安全地将聚合标记为已删除,而不必为处理该空间中的异常而烦恼。
PS 我会替你向阿拉德问好。