在分布式系统中,消息可能以无序方式到达。例如,如果在时间T1发送消息A并且在T2发送消息B,则有可能在A之前接收B.例如,如果A是诸如“CustomerRegistered”的消息并且B是“CustomerUnregistered”的消息。
在其他数据库中,如果收到数据库中不存在的客户的CustomerUnregistered,我通常会写一个墓碑。然后,我可以在收到CustomerRegistered消息时检查这个逻辑删除是否存在(也许根据用例简单地忽略此消息)。我当然可以做一些与Datomic类似的东西,但我希望Datomic可以帮助我,这样我就不需要这样做。
我想到的一个可能的解决方案是这样的:
可以或许收回不存在的客户实体(CustomerUnregistered)后来当CustomerRegistered收到客户实体在一个时间之前写在历史撤回?如果可以将:db/txInstant
设置为消息中定义的时间戳,那将会很整洁(我认为)。
问题
如何将一个处理这种情况在Datomic以惯用的方式是什么?