CQRS 项目是否需要像 NServiceBus 这样的消息传递框架?

2024-02-02

过去 6 个月的学习曲线充满挑战,CQRS 和 DDD 是罪魁祸首。

这很有趣,我们的项目已经完成了 1/2,我还没有时间深入研究的领域是消息传递框架。

目前我不使用 DTC,因此如果我的读取模型未更新,那么很可能会出现读取和写入数据库之间的不一致。我的读写数据库也将在同一台机器上。我怀疑我们是否会将它们放在不同的机器上。

我的系统中没有大量消息,因此我更关心的是系统的一致性和可靠性。

那么,我是否必须放入像 NServiceBus 这样的消息传递框架(即使读写数据库都在同一台机器上)还是有其他选择?是的,有学习曲线,但我想如果我不使用它,就会有很多东西需要学习。

另外,如果没有必要,我不想添加图层

想法?


目前我不使用 DTC,所以很有可能如果 我的读取模型未更新,那么我之间会出现不一致 读取和写入数据库。

就我个人而言,我不喜欢 DTC,并尽力避免它。相反,通常可以实现补偿机制,特别是对于像读取模型这样的模型,其中最终一致性已经可以接受并且更新是幂等的。例如,您可以在实体上实现版本,并有一个后台任务来确保版本同步。拥有 DTC 将提供事务性重试功能,但它仍然无法解决重试后发生故障的情况 - 您仍然必须查看错误日志并制定适当的程序来处理错误。

那么,我是否必须放入像 NServiceBus 这样的消息传递框架(甚至 虽然读和写数据库都在同一台机器上)还是我 还有其他选择吗?

这取决于几件事。在 CQRS 系统中经常遇到的是发布/订阅的需求,其中多个子系统发布查询/缓存系统订阅的事件。如果您发现除了基本的点对点消息传递之外还需要发布/订阅,那么请选择 NServiceBus 之类的东西。另外,即使您出于可扩展性目的不需要它,我也不会立即回避使用 NServiceBus,因为我认为逻辑分区本身是有益的。另一方面,正如您所指出的,增加复杂性的层数成本高昂,因此首先尝试看看最简单的方法是否可行。

另一个要问的问题是您是否需要一个单独的查询存储。如果您只有一台机器,为什么还要麻烦呢?你可以使用更简单的东西,比如读取模型模式 http://gorodinski.com/blog/2012/04/25/read-models-as-a-tactical-pattern-in-domain-driven-design-ddd/并且仍然可以获得 CQRS 的很多好处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CQRS 项目是否需要像 NServiceBus 这样的消息传递框架? 的相关文章

  • 在 CQRS 中实现基于集合的约束

    我仍在努力解决与 CQRS 风格架构相关的基本 和已解决 问题 我们如何实现依赖于的业务规则a set的聚合根 以预订应用程序为例 它可以帮助您预订音乐会门票 电影座位或餐厅餐桌 在所有情况下 只会有数量有限待售 物品 让我们想象一下该事件
  • NServiceBus 到底是一个 ESB

    NServiceBus 到底是 ESB 还是轻量级 ESB 或者它更像是具有持久 可靠消息传递的 WCF 在我看来 它更像是一个消息传递框架 而不是 ESB 只是想要一些指导 因为我刚刚开始研究不同的 ESB 产品以及它们能够做什么或不能做
  • 与旧系统的 CQRS

    我希望将一个具有清晰域模型的相对较新的基于 Web 的应用程序转换为更多 CQRS 风格的系统 我的新应用程序本质上是对现有旧系统的增强替代 我的组织中的现有系统共享一组通用数据库 这些数据库由整个公司孤岛中存在的无数应用程序 通过混沌方法
  • Localstack 与 MassTransit 未收到消息

    我在使用 LocalStack 测试 MassTransit 时遇到问题 但在 AWS 中使用真正的 SNS SQS 一切正常 因此我怀疑这是 LocalStack 的问题 除非 MassTransit 需要配置 ServiceURL 以外
  • CQRS-最终一致性

    我有以下场景 需要按照 CQRS 模式来实现 用户登录 用户输入一些保险详细信息 用户请求应用决定 用户查看决策结果 这看起来相当简单 但是我的问题是在步骤 3 和 4 之间 在步骤 3 中我发送了一个ApplyForDecision命令将
  • MassTransit 与非 .NET 服务的互操作性

    我一直在使用 MassTransit 并且非常喜欢它 但是 默认情况下 它使用 MassTransit 特有的一些 JSON 包装所有 RabbitMQ 有效负载 消息 这使得与非 NET 服务交换消息变得困难 我知道 JSON 可以用任何
  • NServiceBus 警告“找不到消息类型的处理程序”

    我是 NServiceBus 的新手 正在尝试开发一个发布者和单独的订阅者 我使用的是 v3 2 0 0 到目前为止 它工作正常 发布者和订阅者都在 NServiceBus 主机中运行 我的消息全部发布正常 但订阅者间歇性地无法接收它们 发
  • DDD 中两个限界上下文之间的通信

    我有几个不同的有界上下文在域中 CRUD 操作的验证是在每个限界上下文中构建的 例如 我可以仅当创建者是组长时才创建名为 GAME 的实体 在这个例子中我有两个有界上下文 BC 其一是Game BC另一个是User BC 为了解决这个问题
  • 配置要在 Consumer 中传递的端点时添加元数据

    因此 当我配置端点并设置ep Consumer
  • 如何处理nservicebus中的消息顺序?

    我试图找到一种按照发送者发送消息的顺序处理消息的方法 因为 NServiceBus 不保证消息将以特定顺序处理 发送者是一个订单系统 它发布 createOrder 和 reviseOrder 命令 发送者允许用户向同一订单提交多个修订 因
  • 为什么 MassTransit 消息传递中不允许使用结构体?

    消费者界面在MassTransit所有人都期望消息模型是类而不是结构 由于它们都是内部接口 我必须说那里的设计非常好 这是显示约束的通用容器类 直接获取从源代码来看 https github com MassTransit MassTran
  • 派生类型不会发布给 MassTransit 中的消费者

    我在发布派生类型的通用消息以及使用 MassTransit v2 8 0 调用处理程序时遇到问题 如果我发布一条类型的消息HtmlBlockNewMessage 消费者永远不会被调用 如果我发布一个ServiceBusMessage反对并改
  • 是否可以在没有 Axon Server Enterprise 的情况下扩展 Axon Framework

    是否可以在没有 Axon Server 的情况下扩展 Axon Framework企业 我有兴趣使用 Axon 创建原型 CQRS 应用程序 但最终的可部署系统必须免收许可费用 如果 Axon Framework 无法使用免费软件扩展到六个
  • nServiceBus、公共交通、Rhino 服务总线、其他?

    只是做一些快速的尝试 以可能使用消息传递系统来处理良好解耦的工作流系统中的文件 人们发现使用上述每个框架的优点和缺点是什么 与带有 WCF 绑定和 或非 MSMQ 解决方案的手动 MSMQ 系统相比 使用这些有哪些优势 我建议远离手动解决方
  • 如何通过 InMemoryTestHarness 成功驱动 MassTransitStateMachine?

    跟进 如何编写 MassTransitStateMachine 单元测试 https stackoverflow com questions 49763600 how to write masstransitstatemachine uni
  • CQRS - 如何对场景执行系统进行建模

    我最近开始为我即将启动的一个绿地项目研究 CQRS 和 DDD 我研究了 Udi Dahan Greg Young Mark Nijhof 等人的大量资料 这些确实非常有帮助 我想我对这些概念有了很好的理解 但是 我仍然有一些关于如何将这些
  • CQRS、DDD同步报告数据库

    我们正在尝试 CQRS 和 DDD 以及事件溯源 假设我有一位客户更新了电子邮件地址 这会触发 CustomerUpdatesEmailAddress 事件 这会进入我的操作 写入数据库 并更新表 我们的系统设计为有一个运行的 ETL 流程
  • 使用 CQRS 的读取端实现方法

    我已经转移到积极使用 CQRS 事件源的项目 乍一看它是按照所有这些书籍和博客来实现的 但最后我意识到实现中到底有什么问题 Here is CQRS architecture 这张照片最初是我从here http cre8ivethough
  • 自动扩展 Axon 的跟踪事件处理器

    我使用 Axon 框架 4 0 3 和 Spring Boot 来进行事件溯源 并有一个跟踪处理器 该处理器配置为具有多个段 线程来同时处理事件 axon eventhandling processors my processor init
  • 公共交通所有故障消息由一名故障消费者处理

    如何拥有一个通用消费者来处理所有故障消息 我是否需要为每条故障消息注册故障消费者 为何不消费Fault public class WantAllFaultsGimmeThem IConsumer

随机推荐