据我所知,为了实现MSMQ负载均衡,必须使用诸如NLB之类的技术。
为了实现MSMQ高可用性,必须对相关的Biztalk主机进行集群(因此底层服务器本身必须在集群中)。
然而,根据微软的文档,NLB和FailOver集群技术并不兼容。请参阅此链接以供参考:http://support.microsoft.com/kb/235305
谁能给我解释一下如何实现MSMQ的负载均衡和高可用性?
先谢谢你,
我
发布于 2010-04-28 05:36:11
我编辑了我的原始答案,因为经过思考,我认为我在胡说。
我认为在BizTalk事务场景中不可能同时实现负载平衡和高可用性。请查看以下站点http://blogs.msdn.com/eldarm/上的“在MSMQ2006中从BizTalk /T迁移到MSMQ的迁移注意事项”部分
总结一下这篇文章,有几个场景:
高可用性(非事务性)
您只需将MSMQ放在NLB后面的多个BizTalk服务器上。
高可用性(事务性)
为此,您需要有一个集群MSMQ主机,这意味着您不能在单个队列上执行任何类型的负载平衡。
一种可能的折中解决方案是在不同的群集主机上创建两个MSMQ适配器,每个适配器处理不同的队列。但对我来说听起来不太好。
一个关键点是理解为什么你想要事务性的,集群的行为-你需要这个有序的交付,并确保没有重复。
一般来说,我不会去麻烦负载平衡MSMQ -一旦消息到达MessageBox数据库,BizTalk本身就是负载平衡的。虽然您确实会看到由于在一台机器上进行队列处理而导致的非对称负载,但在BizTalk环境的整体上下文中,这应该不是很重要。
同样,值得记住的是,您群集MSMQ的原因不只是简单的高可用性:
MSMQ适配器接收处理程序- MSMQ不支持远程事务读取;仅支持本地事务读取。MSMQ适配器接收处理程序必须在群集MSMQ服务的本地主机实例中运行,才能使用MSMQ适配器完成本地事务读取。
这来自下面的MSDN页面。
我希望这个经过编辑的答案会有所帮助--我不认为这是你想要的,也许我错了,你会为NLB和事务性MSMQ找到一个可行的解决方案,但我越想越觉得这两种情况不兼容。
最后一个想法是,你可以尝试在服务器故障上发布一个类似的问题-堆栈溢出上有一些BizTalk开发人员,包括至少两个MVP,但至少在我工作的地方,这类问题我会传递给我的网络团队。
https://stackoverflow.com/questions/2725041
复制相似问题