我们一直遇到一个问题,即向 MSMQ 写入消息的速度非常慢。我们的队列位于 Windows Server 2008 SP2 上。该队列是一个公共队列,地址为“servername\queuename”。
向队列发送消息的代码是
MessageQueue queue = new MessageQueue(Settings.Default.DefaultDestinationQueue);
queue.Formatter = new BinaryMessageFormatter();
queue.Send(message);
我们尝试发送的消息只是一个“PublishMessage”,如下所示:
[Serializable]
public class PublishMessage {
public int EntryId {get; set; }
}
我们看到消息确实到达了队列,但前后记录显示每条消息通常需要超过 1 分钟的时间。
目前,我们看不出队列配置有什么问题,但我们不是排队专家——这是此应用程序的第一次添加。有人有什么想法吗?
编辑:我们的服务器运行的是 SP 2(不是我最初所说的 SP1)。直接在托管队列的机器上运行实例很快,其他任何机器都不是。
笔记:我已经转发了这篇文章https://stackoverflow.com/questions/6083070/msmq-write-taking-1-minute
答案1
我们发现问题出在服务器无法正确验证的基础设施上。我们的系统管理员最终通过重新配置托管队列的服务器解决了这个问题。
答案2
您能否澄清一下“前后日志显示每条消息通常需要超过 1 分钟的时间。”您是在 send() 之前和之后直接进行日志记录吗?还是在两行日志记录之间有更多代码? send() 将消息传递到本地队列管理器,然后传送到远程队列管理器。任何日志记录都只会显示消息何时进入传出队列,而不是何时被传送。
我将依靠性能监视器来准确显示消息何时离开一台机器并到达另一台机器。
我见过的大多数延迟是:
- 发送应用程序出现延迟
- DNS/名称解析问题(但这只会延迟第一条消息,因为此后连接即可启动并运行)。
发送消息时查看传出队列以了解连接是否处于待处理状态。
延迟是否一致?
欢呼
John Breawkell