小编Geo*_*rge的帖子

事件溯源:同时创建冲突事件

我正在尝试使用 Kafka 实现一个事件溯源系统,但遇到了以下问题。在新用户注册期间,我想检查用户提供的用户名是否已被使用。但是,请考虑 2 个用户尝试同时注册提供相同用户名的情况。

在我对 ES 工作原理的理解中,处理注册请求的控制器将检查请求是否有效,然后它将NewUser向 Kafka发送一个新事件(例如),最后该事件将由另一个控制器接收,该控制器将将其保存在物化视图中(例如 Postgres DB)。问题是请求的验证是针对物化视图完成的,但对它的实际持久化发生在稍后。因此,因为这 2 个请求是并行处理的(由不同的服务实例),所以它们可能都通过了验证,从而产生了 2 条NewUser消息。但是,当第二个控制器尝试将这 2 条NewUser消息保存在数据库中时,第二个事件将失败,因为违反了用户名的唯一性约束。

关于如何解决这个问题的任何想法?

谢谢。

更新:

特别是,我想验证以下是否是解决问题的可接受方法:

  1. 使用用户名作为用户 ID(限制性)
  2. 将事件发送到按用户名分区的主题,并在验证完成后将事件发送到另一个主题

concurrency event-sourcing apache-kafka

6
推荐指数
1
解决办法
643
查看次数

用Kafka实施Sagas

我正在使用Kafka进行事件采购,并且我对使用Kafka实现sagas感兴趣。我做了一些研究,但找不到任何关于该主题的信息。关于Sagas的信息很多,但我觉得使用Kafka的实现可能涉及多个复杂问题。有关如何执行此操作的最佳做​​法?这里提到的Commander模式似乎与我要构建的体系结构很接近,但是在演示文稿的任何地方都没有提到sagas。

event-sourcing saga apache-kafka

5
推荐指数
1
解决办法
3134
查看次数

标签 统计

apache-kafka ×2

event-sourcing ×2

concurrency ×1

saga ×1