2

我正在尝试在同一域内的两台不同机器上的两个服务之间设置 msmq 通信。

机器是主要 - 次要情况。

我需要能够从主节点发送和清除,并从辅助节点接收

我似乎找不到允许这样做的设置。我有一个设置,其中队列存在于辅助节点上,主节点可以发送,辅助节点可以接收,但我无法根据需要从主节点清除。我相信这是由于队列是私人和远程的。

所以我试图扭转局面。我将队列放在主队列上,但后来我无法发送到私有本地队列,所以我将它们公开,现在我无法让辅助队列找到远程公共队列。

if (!MessageQueue.Exists(queueName))
 {
      //log they don't exist and exit
      throw new Exception("One or more of the required queues do not exist");
 }

syncQ = new MessageQueue(queueName){Formatter = new XmlMessageFormatter(new Type[] {typeof (String)})};

if (machineState == MachineState.Primary)
{
     syncQ.SetPermissions(ASPConfiguration.SyncUser, MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow);

     syncQ.Purge();
}

主要 = ".\nw"

次要 = "FormatName:Direct=OS:CACTEST-WS-D\nw"

只要我能做我需要的事情,队列对我来说是私人的还是公共的并不重要。

谢谢您的帮助。

4

1 回答 1

2

回答您的疑问:

我有一个设置,其中队列存在于辅助节点上,主节点可以发送,辅助节点可以接收,但我无法根据需要从主节点清除。

您拥有的初始设置,以及辅助队列和主发送到辅助队列是正确的配置。不确定为什么您无法从主队列中清除辅助队列。这可能只是队列权限的一个简单案例。尝试授予在主服务器上运行的服务帐户的完全控制权。

所以我试图扭转局面。我将队列放在主节点上,但后来我无法发送到私有本地队列

再次,不确定这是为什么。你收到什么错误?您可以启用 MSMQ 跟踪,这将为您提供两台机器上的任何传输错误。无论如何,这不是正确的配置。最好发送 remote-receive local

主要 = ".\nw"

在所有情况下都最好使用完全格式化的 msmq 地址以避免解决问题。

队列对我来说是私人的还是公共的并不重要

嗯,这真的很重要。公共队列适用于具有高容量、集群和/或路由要求的企业级配置,无论如何您必须将它们注册到活动目录才能使其正常工作。如果您只想将东西从一个地方发送到另一个地方,请始终使用私人队列。

我的建议是恢复初始设置并专注于远程清除工作。

于 2012-10-16T07:39:50.353 回答