CQRS - 重新发布事件

Posted

技术标签:

【中文标题】CQRS - 重新发布事件【英文标题】:CQRS - republish events 【发布时间】:2013-06-25 12:35:15 【问题描述】:

我们有一个 CQRS 项目,并且正在考虑一种实现“追赶”的方法,例如一个新的事件处理程序被启动并告诉事件存储为他重播所有事件。

我们不确定是否应该通过 NServiceBus 进行回放,因为存在真正的 1:1 连接并且没有发布/订阅情况。此外,我们认为我们的新消费者无法跟上发布速度,并且其输入队列会卡住。

这里的最佳做法是什么?

【问题讨论】:

你能补充一些细节吗?我有点迷茫到底是什么问题。 简而言之:CQRS -> 安装了新的读取模型 -> 读取模型的事件处理程序需要从头开始接收所有事件以填充读取模型 -> 最佳实践从活动商店:-) 每个读取模型都是副本吗? 【参考方案1】:

我听说有人这样做:

    拥有重播/重播事件的系统。产生已经看到这些事件的投影的事件处理程序会忽略这些事件。 在重置事件或从头开始新的投影时,允许事件处理程序直接查询事件。这可以在某些系统中通过直接从事件存储中读取来完成,而在其他基于参与者的系统中,可以查询围绕事件源的参与者抽象。

据我了解,选项 2 可以提高性能,因为可以批量查询事件,而不是单独重播给所有侦听器。这些只是我的观察,还没有任何实际经验可供借鉴。

【讨论】:

以上是关于CQRS - 重新发布事件的主要内容,如果未能解决你的问题,请参考以下文章

CQRS / 事件溯源 / 事件总线 / 时序

事件溯源和 CQRS,我错过了啥?

CQRS 和事件溯源指南

CQRS + 微服务处理事件回滚

使用事件溯源和 CQRS 的缺点是啥?

事件溯源/CQRS 读取模型 - 预测