无法使用2个DNS名称发送到MSMQ

无法使用2个DNS名称发送到MSMQ,dns,msmq,Dns,Msmq,向服务器上的第二个DNS名称发送MSMQ消息时出现问题。如果我们为同一台服务器发送IP,我们就可以了,但这不是我们在架构上要做的。关于为什么MSMQ会关心它收到的名称,有什么想法吗 服务器信息: 物理服务器load-int-01,具有与之关联的第二个IP和DNS名称 第一个IP/DNS:load-int-01,IP10.0.10.10 第二个IP/DNS:加载intv,IP10.0.10.20 使用的队列路径格式: FormatName:DIRECT=OS:load-int-01\priv

向服务器上的第二个DNS名称发送MSMQ消息时出现问题。如果我们为同一台服务器发送IP,我们就可以了,但这不是我们在架构上要做的。关于为什么MSMQ会关心它收到的名称,有什么想法吗

服务器信息:

物理服务器
load-int-01
,具有与之关联的第二个IP和DNS名称

  • 第一个IP/DNS:
    load-int-01
    ,IP
    10.0.10.10
  • 第二个IP/DNS:
    加载intv
    ,IP
    10.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
    → 很好
来自:

默认情况下,消息队列验证它接收到的消息,以确定该消息是否用于本地计算机。如果该消息不适用于本地计算机,则该消息将被拒绝


因此,请按照本文中关于“IgnoreOSNameValidation”的部分进行操作,我希望这会有所帮助。

我们刚刚与Microsoft通完电话。这是MSMQ的一个限制。您不能在DNS名称与服务器NETBIOS名称不同的队列上接收。如果使用上述两个注册表项OptionalNames和IgnoreOSNameValidation,则可以使用备用DNS名称发送到队列

请为我们返回虚拟ip,或者我们可以保留发送连接字符串的虚拟名称(使用reg设置),并使用。\r作为接收服务器名称…这很有效


谢谢你的帮助。

非常令人沮丧。我正在尝试迁移一些MSMQ目标(web服务),我想我必须将它们配置为使用虚拟IP,并迁移虚拟IP,因为迁移NetBIOS名称将是一项任务


MSMQ应该重新命名为MSMQ-1982,因为它似乎早于1983年发明了一种称为“DNS”的巧妙而有用的抽象层。

我也遇到了同样的问题,并使其正常工作。我的窍门是在设置IgnoreOSNameValidation注册表项后,必须重新启动消息队列服务

我知道这是一篇老文章,但在谷歌搜索解决此问题的方法时,它出现了。

这确实对我有用:

FormatName:DIRECT=TCP:HOST.TLD\PRIVATE$\MyQueue 
请注意,使用
TCP
而不是
OS
。这是相关的:

使用Direct=TCP此配置发送非事务性消息

没有任何特定配置更改的功能


好发现。然而,我们最近已经尝试过了(这一个真的很糟糕。你在使用事务性队列吗?不,但我们设置了一个测试应用程序,并尝试了事务性和非事务性。结果相同。目前,通过将IgnoreOSNameValidation(来自下面的答案)注册表设置与另一个设置别名的注册表设置相结合,可以获得相同的结果(HKEY\U Local\U Machine\System\CurrentControlSet\Services\LanmanServer\Parameters中的可选名称键),我们可以使用命名约定发送到这些队列,但无法在它们上接收。如果没有这两个reg设置,我们甚至无法发送。