将此发布在 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)