我们正在考虑在应用程序中使用MSMQ作为消息处理服务。我们想要的是——位于网络负载平衡器(NLB)后面的服务器群中的MSMQ,它在节点之间分配负载。我有以下问题,我在网上找不到任何提示。
1)我需要在所有节点上安装MSMQ吗?
2)如果是这样,当发送方应用程序向MSMQ发送消息时,它是否应该发送到所有节点?
3)如果我的第二个问题的答案是肯定的,那么当客户端应用程序接收到消息时,应该如何通知其他节点该消息已被客户端接收并随后从它们中删除?
这里有一些博客文章可能会有所帮助:
- 油和水- MSMQ事务消息和负载平衡
- 负载均衡MSMQ -简要讨论
Q1)我需要在所有节点上安装MSMQ吗?
A1)您需要在每个服务器上安装MSMQ,以便消息也将被传递。
Q2)如果是这样,当发送方应用程序向MSMQ发送消息时,它是否应该发送到所有节点?
A2)这是一种负载平衡的方法,您向X个节点发送X条消息,但只从一个节点读取,丢弃其他副本。
另一种方法是向网络负载均衡器发送消息,该网络负载均衡器向一个随机选择的节点发送一条消息,尽管MSMQ非常粘,因此很难/不可能以这种方式负载均衡高容量。
Q3)如果我的第二个问题的答案是肯定的,那么当客户端应用程序接收到消息时,应该如何通知其他节点该消息已被客户端接收并随后从它们中删除?
这是您所建议的负载平衡类型的缺点。MSMQ不会删除消息,除非你的应用程序删除它或者timetoberreceived定时器过期。基本上,如果需要避免重复的消息处理,则需要协调客户机应用程序。
欢呼约翰Breakwell