【问题标题】:CQRS and service busCQRS 和服务总线
【发布时间】:2011-09-28 09:18:58
【问题描述】:

CQRS 是关于分离命令和查询的。我们可以使用 Event Sourcing、DDD、NoSQL 等多种模式和技术轻松添加它……但是 ServiceBus 是强制性的吗?

【问题讨论】:

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

标签: cqrs


【解决方案1】:

我会说消息传递和服务总线是可选的。

CQRS 仅仅意味着分解您的应用程序,以便您的应用程序的读取和写入部分可以针对各自的关注点进行优化。命令可以直接处理,甚至事件,如果您决定使用它们,也可以同步调度。

使用内部调度程序的一个很好的参考是Greg Young's simple examle

更新:Rob Ashton has just posted a very good article 关于 CQRS 是什么以及如何不让它变得比实际更复杂。

【讨论】:

    【解决方案2】:

    没有 serviceBus 不是强制性的,它只是用于实现 CQRS 的技术之一,例如 Event Pub/Sub。如果有的话,Event Sourcing 和 DDD 与 CQRS 的关系比 ServiceBus 更密切。

    【讨论】:

    • CQRS 是基于 CQS 的,但是我们怎么能说做 CQS 就是做 CQRS 呢?根据 gregory youngs 的说法,我记得他在他的一个网络广播中介绍 CQRS 时说过,CQRS 与 CQS 的不同之处在于它处于架构级别。如果使用 DDD、Event Sourcing 是可选的,这意味着什么?
    • CQRS 是 CQS 在架构层面的应用。 Bertrand Meyer 的 CQS 原则被应用于方法级别,并且其本身几乎没有架构影响。为了尽量减少混淆,我将 CQRS 和 CQS 视为完全独立的,因为它的应用级别是如此不同。类似的只是基本原则本身:提出问题不应该改变答案。
    【解决方案3】:

    没有。您可以在没有服务总线的情况下使用 CQRS。在您的情况下,您只需要命令调度程序和查询调度程序

    【讨论】:

    • 查询调度器?
    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 2017-01-13
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多