【问题标题】:Key Benefits of MSMQMSMQ 的主要优点
【发布时间】:2012-02-23 01:22:38
【问题描述】:

我见过很多使用 MSMQ 的套接字应用程序。但是当我详细介绍时,我认为我们也可以在没有 MSMQ 的情况下做到这一点,所以我想知道 MSMQ 的主要好处是什么。为什么有人应该在自己的应用程序中使用 MSMQ。

【问题讨论】:

  • 您是在问为什么要使用 MSMQ 对消息进行排队而不是使用其他一些排队机制,或者为什么要对消息进行队列而不是直接将它们传递到目的地?
  • 你也可以在这里找到一些线索bytes.com/topic/c-sharp/answers/…

标签: c# .net msmq


【解决方案1】:

MSMQ 是一个很棒的 Windows。它基本上是一个message-oriented middleware,对某些软件架构有很大帮助。

这主要解决异步消息处理的常见用例:您有一个服务Service1 与您的软件架构的另一部分通信(发送消息),例如Service2

主要问题:如果Service2 突然不可用怎么办?消息会丢失吗? 如果您使用 MSMQ,则不会:Service1 会将消息发送到队列中,Service2 将在可用时出列。

MSMQ 将解决以下常见问题:

  • 服务暂时不可用:消息保存在磁盘上,当服务再次可用时将出列,因此不会丢失任何消息
  • 因为它是完全异步的,所以在准时峰值负载的情况下会有很大帮助:您的Service2 不会在重负载下死掉,它只会出列并处理消息,一个接一个

MSMQ 与另一个面向消息的中间件的优点:

  • 免费和内置(随 Windows 提供)
  • 与其他 Microsoft 产品的良好集成(例如 .Net 中有 System.Messaging 命名空间来处理 MSMQ)
  • 监控功能(使用 perfmon 计数器:每秒接收的消息数...)
  • 事务队列
  • 磁盘上的持久性,因此消息永远不会丢失
  • 可通过网络获得(远程队列)

【讨论】:

  • 如果 MSMQ 突然变得不可用怎么办?我们不会落入同一个陷阱吗?
  • @ken2k 要授予这两个服务的可用性,它们是否应该在同一服务器中都有一个 MSMQ?那么服务 2 会从服务 1 的服务器中的 MSMQ 读取数据,反之亦然?
  • 这是一个很好的答案,我不明白为什么@ken2k 没有回复这些 cmets。
  • 也许 ken 可以详细说明,但我的服务 2 (S2) 失败可能意味着您的服务不一定“消失”,而是无法正确处理来自服务 1 (S1) 的项目。我们总是使用队列并且在完全处理之前不允许删除消息。这样,如果我们创建了一个新版本或发生了一些奇怪的事情,我们就有机会在丢失相关数据之前做出响应。丢失耦合也很好。
猜你喜欢
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 2011-01-07
  • 2010-12-15
  • 2014-02-09
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多