【发布时间】:2011-09-28 09:18:58
【问题描述】:
CQRS 是关于分离命令和查询的。我们可以使用 Event Sourcing、DDD、NoSQL 等多种模式和技术轻松添加它……但是 ServiceBus 是强制性的吗?
【问题讨论】:
-
这不是强制性的,通常也没有必要。例如,我使用 Event Store 来存储事件、在具有乐观并发的流上写入、读取流、订阅事件(这已经使服务总线成为可选)、重放事件等。你可以使用某种消息总线,但你会很快就会面临分布式事务问题(例如:如果一个事件被正确存储在事件存储中,但应用程序在广播消息之前就停止了,会发生什么?)这就是事件存储派上用场的地方,保存和发布是原子的。
-
您可以使用它在实时事件驱动的场景中广播事件,以便其他有界上下文可以订阅某些事件。当然,消息总线对于重放事件并不理想,只是为了保证传递。有些人将它们用于命令,但我从来不明白,因为命令自然是同步的(例如:与事件不同,命令可以被拒绝),因此将它们放在任何队列中没有任何优势。
标签: cqrs