gpt4 book ai didi

nservicebus - 如何创建使用不同传输的单个 NServiceBus 端点?

转载 作者:行者123 更新时间:2023-12-04 02:30:42 27 4
gpt4 key购买 nike

背景

我们正在尝试在我们的公司中引入一种新的架构模式,并且正在考虑使用服务总线的具有事件源的 CQRS。我们目前正在开发 POC 的技术是 NServiceBus、事件存储和 MSMQ。我们希望在 NServiceBus 中定义一个端点,并用两种不同的传输方式定义,MSMQ 用于我们的命令,事件存储用于我们的事件。我们企业的当前状态不允许我们目前轻松地将所有内容切换到 Event Store,因为我们对使用 MSMQ 的遗留应用程序进行了大量投资,这就是我们考虑混合方法的原因。



是否可以创建使用不同传输的单个 NServiceBus 端点?如果是,如何?如果没有,有哪些替代方案?

最佳答案

亚伦,

我认为最好的选择是使用 MSMQ 作为 NServiceBus 中的传输。下面是它的样子:

  • 通过 MSMQ 发送命令
  • 在命令处理程序中(重新)创建一个聚合,它是命令的目标
  • 调用操作
  • 将生成的事件与命令的消息 ID 一起存储在 EventStore 中,以确保幂等性。聚合本身将负责了解它已经处理的命令
  • 在单独的组件(事件处理器)中,使用 EventStore 持久订阅 API 来 Hook 所有事件流。这些处理过的事件中的一些应该导致发送命令。此类命令可能通过托管在此事件处理器内的 NServiceBus 仅发送端点发送。
  • 在该事件处理器中,您还可以通过 NServiceBus 和 MSMQ 重新发布所有事件。其他服务不应订阅此类事件(请参阅下面有关自治的说明)
  • NServiceBus Sagas(流程管理器)应该位于您的服务边界内,并对这些事件处理器通过 MSMQ 发送或重新发布的命令和/或事件使用react。

  • 关于服务边界的一句话是,您必须决定适合您的服务自治级别:
    * 弱,服务可以直接订阅其他服务事件流。在这个设计中,跨越服务边界的事件显然是允许携带数据的。
    * 强,其中服务使用更高级别的事件进行通信,而这些事件仅携带事物的身份和 没有数据 .如果你想要这样的东西,你可以使用你的事件处理器从 ES 事件映射到这些“更高级别”的事件。

    关于nservicebus - 如何创建使用不同传输的单个 NServiceBus 端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37146866/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com