事件源系统如何保证事件传递的可靠性
How do event sourced systems guarrantee reliability in the event delivery
既然在事件溯源中事件存储不使用事务,那么我们如何保证,如果我们的业务逻辑崩溃了,在它发布一个事件之后,重启服务时该事件不会被发布两次?
如果消息发布和传递两次,如何去重?
不知道事件存储不使用事务。我已经看到事务写入以确保正在写入预期的事件版本。
如果您期望至少一次交付(我假设您是这样),那么您必须处理重复数据删除。有时建议维护所有已处理消息的索引作为重复数据删除方法,但这并不完全安全,因为您只是最小化可以创建重复的代码部分,但不要完全消除这种可能性.如果您处理一条消息,但不更新索引,那么您将再次重新处理同一条消息。相反,您应该使所有操作都是幂等的。也就是说,执行相同的动作两次将产生相同的结果状态。如果您两次处理同一条消息,它应该只更新一次状态。
既然在事件溯源中事件存储不使用事务,那么我们如何保证,如果我们的业务逻辑崩溃了,在它发布一个事件之后,重启服务时该事件不会被发布两次?
如果消息发布和传递两次,如何去重?
不知道事件存储不使用事务。我已经看到事务写入以确保正在写入预期的事件版本。
如果您期望至少一次交付(我假设您是这样),那么您必须处理重复数据删除。有时建议维护所有已处理消息的索引作为重复数据删除方法,但这并不完全安全,因为您只是最小化可以创建重复的代码部分,但不要完全消除这种可能性.如果您处理一条消息,但不更新索引,那么您将再次重新处理同一条消息。相反,您应该使所有操作都是幂等的。也就是说,执行相同的动作两次将产生相同的结果状态。如果您两次处理同一条消息,它应该只更新一次状态。