我将 MSMQ 作为 Windows 故障转移群集上的群集资源运行。我们希望使用队列的 NAT IP 地址通过 HTTP 将消息发送到队列。
在非集群环境中,这可以正常工作,因为我们将 IP 映射文件部署到 MSMQ/Mapping 文件夹。MSMQ 读取此文件并了解将这些消息发送到何处。
在集群场景中,根本不会转换该 NAT IP 地址。
我的队列是在集群上下文中创建的,并且可以使用http://CLUSTERNAME.Domain/MSMQ/Private $/queuename从同一网络中的机器接收消息
我将以下 XML 映射文件部署到主动和被动节点的 %windir%\system32\msmq\mapping 文件夹中,在主动节点上重新启动 Clustered msmq 服务。
<redirections xmlns="msmq-queue-redirections.xml">
<redirection>
<from>http://NAT_IP_ADDRESS:8080/msmq/Private$/myQueue</from>
<to>http://Cluster_IP:8080/msmq/Private$/myQueue</to>
</redirection>
</redirections>
这没有效果。消息仍然无法传递。
笔记
- 我可以看到来自远程发件人的传入请求是活动节点的 IIS 日志。HTTP 状态为 200。
- 我可以使用带有 NAT IP 地址的 Internet Explorer(501/505 错误)浏览到远程发件人上的集群 msmq。
- 为清楚起见,我已通过 HTTP 成功地将消息发送到队列,但仅来自同一网络。
有人有想法么?
问候
尼尔