【问题标题】:how to configure nservicebus using gateway when MSDTC not available either end当 MSDTC 两端都不可用时如何使用网关配置 nservicebus
【发布时间】:2012-01-25 21:03:00
【问题描述】:

我是 NServiceBus 的新手,正在尝试将消息传递引入 WCF/RPC 解决方案。

由于架构限制和开销(内存和 CPU 使用率已经很高),IT 运营部门将不允许 MSDTC。 (我也很想避免 2PC fwiw)。我还需要通过 http 发送消息,因此 NSB 桥看起来是一个很好的解决方案。

根据这些帖子(how-i-avoid-two-phase-commitextending-nservicebus-avoiding-two-phase-commits),在我看来好像可以在禁用 DTC 的情况下使用 NSB。 听起来EventStore 确实设法避免了 2PC,就像我想设置 NSB 一样,但目前我只想让 NSB 工作而不是添加事件源。

问题:

  1. 有没有配置 NSB 以这种方式工作的示例?我很高兴添加额外的复杂性(具有本地消息状态存储的自定义消息处理程序) - 如果没有 2PC,就没有其他选择。我已经知道这个例子 (IdempotentConsumer) 但是这个 repo 的测试项目不包含任何代码。如果有一个使用 nosql 存储的示例会更有帮助。
  2. 是否需要更改 NSB 网桥以处理无 DTC?我猜没有 - 桥接事务仅针对本地队列,但消耗本地队列的进程显然需要编码以避免 2PC。正确吗?
  3. 关于在没有 MSDTC 的情况下使用 NSB 是否还有其他有用的资源/帖子?解决方案 (how-i-avoid-two-phase-commit) 似乎并不太复杂,但考虑到我刚刚开始使用 NSB,如果能找到一个快速入门,那就太好了...
  4. 我原以为这将是一种常见情况 - 但似乎没有太多关于在仍然使用 NSB 的同时避免 MSDTC 的文章。当然还有其他人正在使用消息总线,但不允许使用 MSDTC...还有其他我错过的明显方式吗?

谢谢

【问题讨论】:

  • 提前咆哮:“内存和 CPU 使用率已经很高 IT 运营不允许 MSDTC”。 IT 运维人员和 DBA 如何做出对软件构建方式和最终成本产生根本影响的决策总是很有趣。并不是说 ES 和所有不好的东西,恰恰相反,但应该使用它,因为业务需要它,而不是因为 IT 运营中的某些人认为内存很昂贵。相信我,开发时间比内存和 CPU 贵得多。 - 结束咆哮
  • 是的,我很清楚开发时间比硬件更昂贵。我不认为离开 MSDTC 是一件坏事——它对我们可以使用哪些持久性存储有点限制。这就是为什么我很惊讶 NSB(论坛等)似乎没有更多关于删除 MSDTC 硬性要求的讨论(我想这只能通过在 NSB 中安装像 jonathan Oliver 这样的解决方案来完成描述)。无论如何,没有 MSDTC 是我遇到的限制 - 所以我真的很想看到一个如何解决它的示例。
  • 我不会将其称为 nsb 的“硬”要求。您可以通过调用 configure.IsTransactional(false) 将其关闭。我们无能为力提供进一步帮助,因为您基本上需要代码,而您已经摆脱了它。但是 ES 当然让这更容易。

标签: nservicebus cqrs event-sourcing


【解决方案1】:

2) 是的,你应该没问题。由于您自己进行重复数据删除,因此您不需要网关为您执行此操作。只需将其配置为使用 InMemory 持久性就可以了。

【讨论】:

  • 太好了,谢谢。我的主要问题仍然是 1) - 希望看到一个解决 2 阶段提交的示例。一定是在某个地方。 提示乔纳森奥利弗...? 提示 ;)
  • 你只是个脾气暴躁的老家伙乔纳森:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多