![]() |
1
9
免责声明: 这不是对你的问题的回答,而是一个预防性的信息 不应该 做你打算做的事。 虽然消息代理(如RMQ)和消息中间件库(如massttransit)非常适合集成,但我强烈建议不要将消息代理用于事件源。我可以参考我以前的答案 Event-sourcing: when (and not) should I use Message Queue? 这就解释了背后的原因。 你发现自己的原因之一——活动顺序永远无法保证。 另一个明显的原因是,从通过消息代理发布的事件构建读取模型可以有效地消除重播的可能性,并构建新的读取模型,这些模型需要从一开始就开始处理事件,但它们得到的只是正在发布的事件 现在 .
聚合形成事务边界,因此每个命令都需要保证在一个事务中完成。而MT支持
transaction middleware
,它只保证获得支持它们的依赖项的事务,而不是
对于事件源,每个读取模型在其投影的事件流中保持自己的检查点是至关重要的。消息代理不会给您这种权力,因为“检查点”实际上是您的队列,一旦消息从队列中消失——它永远消失了,就不会再回来了。 关于实际问题: 你可以用 message topology configuration 为不同的消息设置相同的实体名,然后它们将被发布到同一个交易所,但这属于Chris在那页上写的“滥用”类别。我没试过,但你绝对可以试试。消息CLR类型是元数据的一部分,因此不应存在反序列化问题。 但是,同样,将消息放在同一个交换中不会给您任何排序保证,除了所有消息都将在消费服务的一个队列中着陆。 您必须至少基于聚合id设置分区过滤器,以防止并行处理同一聚合的多个消息。顺便说一下,这对整合也很有用。我们就是这样做的:
|
![]() |
marek.kapowicki · 从一个视图映射具有嵌入列表的实体 6 年前 |
![]() |
engma · 事件来源中的事件消费者和重复代码 7 年前 |
![]() |
Ivelin Matev · DDD、事件存储、UI 7 年前 |
![]() |
w0051977 · 如何跨上下文共享表格? 7 年前 |
![]() |
mbue · CQRS:类冗余和将DTO传递到域 7 年前 |
|
user8280126 · 事件源/CQRS聚集索引和分区 7 年前 |
![]() |
Jim Aho · 我应该继续添加事件吗? 7 年前 |
![]() |
RubenHerman · CQRS模式-接口 8 年前 |