我正在尝试使用 Kafka 实现一个事件溯源系统,但遇到了以下问题。在新用户注册期间,我想检查用户提供的用户名是否已被使用。但是,请考虑 2 个用户尝试同时注册提供相同用户名的情况。
在我对 ES 工作原理的理解中,处理注册请求的控制器将检查请求是否有效,然后它将NewUser向 Kafka发送一个新事件(例如),最后该事件将由另一个控制器接收,该控制器将将其保存在物化视图中(例如 Postgres DB)。问题是请求的验证是针对物化视图完成的,但对它的实际持久化发生在稍后。因此,因为这 2 个请求是并行处理的(由不同的服务实例),所以它们可能都通过了验证,从而产生了 2 条NewUser消息。但是,当第二个控制器尝试将这 2 条NewUser消息保存在数据库中时,第二个事件将失败,因为违反了用户名的唯一性约束。
关于如何解决这个问题的任何想法?
谢谢。
特别是,我想验证以下是否是解决问题的可接受方法:
我正在使用Kafka进行事件采购,并且我对使用Kafka实现sagas感兴趣。我做了一些研究,但找不到任何关于该主题的信息。关于Sagas的信息很多,但我觉得使用Kafka的实现可能涉及多个复杂问题。有关如何执行此操作的最佳做法?这里提到的Commander模式似乎与我要构建的体系结构很接近,但是在演示文稿的任何地方都没有提到sagas。