无法将 MSMQ 消息发送到服务器的第二个 DNS 名称

无法将 MSMQ 消息发送到服务器的第二个 DNS 名称

将此发布在 StackOverflow 上,但我认为它可能与这群人更相关。

我在向服务器上的第二个 DNS 名称发送 MSMQ 消息时遇到问题。如果我们发送同一台服务器的 IP,那就没问题了,但从架构上讲,这不是我们要去的地方。有什么想法可以解释为什么 MSMQ 会关心它收到哪个名称?

以下是我们的例子:

服务器信息:物理服务器 load-int-01 具有与其关联的第二个 IP 和 DNS 名称。第一个 IP/DNS:load-int-01,IP10.0.10.10第二个 IP/DNS:load-intv,IP10.0.10.20

使用的队列路径格式:

FormatName:DIRECT=OS:load-int-01\private$\MyQueue-> 运行良好

FormatName:DIRECT=OS:load-intv\private$\MyQueue-> 返回以下错误:

队列不存在或您没有足够的权限执行此操作

我们也尝试过使用 IP 地址,两组 IP 都可以正常工作。

FormatName:DIRECT=TCP:10.0.10.10\private$\MyQueue-> 运行良好FormatName:DIRECT=TCP:10.0.10.20\private$\MyQueue-> 运行良好

答案1

可能是由于反向查找。我不确定 MSMQ 如何获取其主机名信息,但如果它从 Windows 获取主机名而不是第二个 IP 的 DNS 主机名,则第二个 IP 的反向查找将失败,因为它将返回与服务器实际主机名不同的第二个 DNS 主机名。

答案2

要通过 DNS 解析,请使用 DNS 名称而不是 IP,两者都应解析:

FORMATNAME:Direct=OS:load-intv\private$\MyQueue
FORMATNAME:Direct=OS:load-int-01\private$\MyQueue 

此外,在 MSMQ 服务器上运行以下注册表脚本(根据http://support.microsoft.com/kb/306785):

reg.exe ADD HKLM\Software\Microsoft\MSMQ\Parameters /V IgnoreOSNameValidation /t REG_DWORD /d 1 /f

答案3

MSMQ 可能期望计算机的 netbios 名称与用于访问该计算机的 dns 主机名相匹配。当您尝试使用 CNAME 将驱动器映射到 Windows 服务器时,也会遇到同样的问题。

有一种方法可以通过添加注册表项来为其指定别名:

HKEY_Local_Machine\System\CurrentControlSet\Services\LanmanServer\Parameters
Add Value: OptionalNames REG_SZ with as value the name of the alias 
If you make it a type REG_MULTI_SZ, you can add multiple aliases.

答案4

您是在同一台机器上发送(本地到 load-intv)还是从远程机器发送?

另外,当您查询 DNS 中的 load-intv 和 load-int-01 时,实际上会返回哪些 IP 地址?只是您提到的那些 - 分别是 10.0.10.20 和 10.0.10.10 - 还是额外的?

是否涉及任何 HOSTS 文件?如果是,您是否有其他 DNS 名称映射到 10.0.10.20?

欢呼 John Breakwell (MSFT)

相关内容