2

我们正在考虑在我们的应用程序中使用 MSMQ 作为消息处理服务。我们想要的是 - 位于网络负载均衡器 (NLB) 后面的服务器场中的 MSMQ,它在节点之间分配负载。我有以下问题,我在网上找不到任何指示。

1) 我是否需要在所有节点中安装 MSMQ?
2) 如果是这样,当发送方应用程序向 MSMQ 发送消息时,它应该发送到所有节点吗?
3)如果我的第二个问题的答案是肯定的,那么当客户端应用程序接收到消息时,应该如何通知其他节点有关客户端接收到的消息并随后从它们中删除?

将不胜感激任何帮助/指针。

4

1 回答 1

4

以下是一些可能有帮助的博客文章:

Q1) 我需要在所有节点上安装 MSMQ 吗?
A1)您需要在每台服务器上都安装 MSMQ,以便消息也将被传递。

Q2) 如果是这样,当发送者应用程序向 MSMQ 发送消息时,它应该发送到所有节点吗?
A2)这是负载平衡的一种方法,您将 X 消息发送到 X 节点但仅从 1 个节点读取,丢弃其他副本。
另一种方法是发送到网络负载均衡器,该负载均衡器将一条消息发送到一个随机选择的节点,尽管 MSMQ 非常粘,因此很难/不可能以这种方式对大量负载进行负载均衡。

Q3)如果我的第二个问题的答案是肯定的,那么当客户端应用程序接收到消息时,应该如何通知其他节点有关客户端接收到的消息并随后从它们中删除?
A3)这是您建议的负载平衡类型的缺点。MSMQ 不会删除消息,除非您的应用程序将其删除或 TimeToBeReceived 计时器到期。基本上,如果您需要避免重复的消息处理,您将需要有协调的客户端应用程序。

干杯
约翰·布雷克韦尔

于 2011-08-12T12:19:35.730 回答