我的应用程序有不同的环境(Dev - > Test - > Prod),我正在使用MSMQ。
我也有通过配置文件使用的队列名称(它们是远程队列),格式如下:
FormatName:Direct=SERVER_NAME\Private$\MY_QUEUE
我的问题是SERVER_NAME在不同的环境中是不同的,我想将该问题委托给服务器(即:对于数据库,我在所有3个服务器中都有相同名称的别名,它们都指向实际的数据库服务器)
我尝试将队列服务器添加到hosts文件中,但它失败并出现以下错误:
队列不存在或您没有足够的权限来执行操作。
我尝试了FormatName:Direct
,FormatName:OS
和FormatName:TCP
任何帮助(解决方法,新想法,如何做到这一点)都将受到高度赞赏。
目标是拥有一个适用于所有环境的配置文件。
答案 0 :(得分:3)
我们也在我们的环境中使用主机文件,并发现(困难的方式)MSMQ不支持它。 我们的解决方案是在MSMQ上使用抽象层(ITransport),并让该层用ip地址替换主机名(可能在hosts文件中找到)。使用Dns class即可轻松完成。
答案 1 :(得分:2)
这只是一个猜测,我现在无法验证这一点,但是:
失败的原因是msmq使用kerberos身份验证。哪个认证交换双方。您的一方正在使用“错误”的名称访问服务器。因此,当服务器尝试与您(客户端)进行身份验证时。 Windows可以“告诉”这不是您正在寻找的服务器。所以它没有通过身份验证。
可能有办法规避这一点。但它会危及安全。我建议将目标服务器的三个名称(dev,qa和production)放在配置文件中。并在它们之间选择一些参数,如域名,用户名,计算机名称或其他类似的东西,在不同的环境中也是不同的。
答案 2 :(得分:0)
您指定的格式名无效。它应该是:
FormatName:Direct=OS:SERVER_NAME\Private$\MY_QUEUE
或者如果您想使用IP地址:
FormatName:Direct=TCP:XXX.XXX.XXX.XXX\Private$\MY_QUEUE