gpt4 book ai didi

transactions - NServiceBus:MSMQ 事务不是很糟糕吗?

转载 作者:行者123 更新时间:2023-12-04 16:56:22 25 4
gpt4 key购买 nike

我正在学习 NServiceBus 和 MSMQ。有人告诉我 MSMQ 中的事务队列很糟糕,使用它们对性能来说真的很糟糕。有谁知道为什么?我猜这来自于它使用 DTC 的概念,每个人都知道 DTC 并不是真正的可扩展解决方案。在我看来,带有 NServiceBus 的 MSMQ 并不是那么糟糕有几个原因,但我不知道我是否完全理解它是如何工作的。从逻辑上看,我可以想到 NServiceBus 可能使用事务来保证交付的 3 个地方:

  • 通过网络发送消息时,您可能希望使用事务来确保消息在丢弃之前已到达远程队列。
  • 从本地队列读取消息时,您可能希望在丢弃它之前确保它被成功处理。
  • 将消息发布给多个订阅者时,您可能希望在丢弃它之前确保它到达所有订阅者。 (我真的希望这不是 NServiceBus 所做的)

  • 谁能告诉我 NServiceBus 如何做到这一点?

    最佳答案

    Msmq 事务不保证接收者已经收到消息。该事务保证消息已被您机器上的 msmq 基础结构接收到,如果消息是持久的(NSB 中的默认值),这意味着它已持久保存在磁盘上,并且可以在重新启动后继续存在。然后消息将由 msmq 传递,而不会阻止调用者。这更好地称为“存储转发”

  • 默认情况下,MSMQ 仅保证您的本地 msmq 基础结构已收到消息。不需要接收服务器在线。虽然可以启用此功能(请参阅下面约翰的回答)
  • 这是 IMO 的 NSB 的主要卖点之一。使用跨本地队列和数据存储(即分布式事务)的事务的能力对于保证一致性至关重要。即,如果出现故障,您的数据存储中不会保留任何内容,并且消息将回滚并重试,而用户无需执行任何操作。
  • 与#1 相同。唯一的保证是每个订阅者最终都会收到发布的消息。只要您有可用的磁盘空间和发布服务器,就不会进行阻塞调用,调用将立即返回。

  • 希望这可以帮助!

    关于transactions - NServiceBus:MSMQ 事务不是很糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515372/

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