1
staticage 2022-04-13 23:22:31 +08:00
1. Guid/Uuid
2. 第二个问题不是特别明白你这个事件中心是什么概念,Event 都是由 Domain 发出的。你要说事件存储关系数据库或者别的数据库都可以,Kafka 或者其他消息队列一般用来分发事件 |
2
lanlanye OP @staticage
1. 我的第一个问题在于这个创建对象的接口是不是不应该返回值,如果是这样的话,后端生成的 uid 前端是获取不到的。 2. 第二个问题的主要疑惑在一致性问题上,举例来说,假如我使用关系库存储事件,用任意 MQ 分发,那就会在一个操作中涉及到两个组件(关系库和 MQ ),我要如何保证这个操作的原子性(即避免出现消息发送成功但事件存储失败之类的情况)? |
3
zartouch 2022-04-14 00:47:29 +08:00
1. 先说下业务场景而不是实现,否则很难给出建议。创建某样东西然后获取这件东西一般是异步的,发创建命令。 创建的处理单元创建了是会发领域事件的,订阅就好了。
2. 没懂事件中心是什么意思。event store 么?一致性的话,关系型数据库和 MQ 一致性这类一般都是通过把发消息的这件事写到 DB ,然后又单独线程去读那张写发事件的表,再来发送 event 。这样保证至少发成功一次。 |
4
lmshl 2022-04-14 11:17:03 +08:00
刚做过两个 CQRS 项目的来回答一下
1. 建议同楼上 UUID ,我自己用的框架是创建 Entity 的时候就要指定 ID 了 2. 目前我直接把 Event 写入到 Kafka ,但你想拿 PostgreSQL / MySQL 做第一个读取端也没问题,有 debezium 这一类工具可以实现生成事件 |
5
zh6335901 2022-04-14 12:16:20 +08:00 1
1. 其实没必要那么严格,折衷一下,返回 Id 这种情况是可以的。
2. 推荐 EventStore ,https://github.com/EventStore/EventStore, 专门针对 EventSourcing 设计的数据库。 |
6
jiayouniu 2022-04-14 15:21:24 +08:00
@lmshl 麻烦问下,CQRS 落地的项目大概是哪种类型的项目?基于什么考虑使用 cqrs 模型的?项目是否是基于 DDD 的模型
|
7
lmshl 2022-04-14 16:27:56 +08:00 1
@jiayouniu 两个项目
一个记录变动历史的 kv 存储中间件 另一个资源管理服务,限制客户请求量,套餐等等 这俩项目都对高可用 /故障自动迁移有一定需求,所以直接用了 Cluster Sharding 架构实现 说实话我没了解过 DDD ,只是按照 Akka Projection 官方例子边学边做 |
8
lanlanye OP |