症状
发送消息时使用 Microsoft 消息队列和 TCP/IP 用作传输协议,则表明可能存在大约除了将数据包通过网络发送之前的延迟。这是因为 Windows TCP/IP 堆栈使用 Nagle 算法。Nagle 算法改善了性能,确保有效使用 TCP/IP 数据包并防止网络处理小型 TCP/IP 数据包。尽管在某些情况下它可能更加有利允许小数据包的特定性能方面的原因。本文介绍如何禁用 TCP/IP Nagle 算法当 MSMQ 发送消息时。
重要:本文包含有关如何修改注册表的信息。请务必备份注册表之前对其进行修改。请确保您知道如何出现问题时还原注册表。有关如何备份、 还原和修改注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
Microsoft Windows 注册表256986说明
解决方案
注意:以下修补程序不需要 MSMQ 2.0 (Windows 2000) 或 MSMQ 3.0 (Windows XP 和 Windows 2003)。 但是,在本文的"更多信息"部分中所述的注册表值将仍然需要添加。
受支持的修补程序现已提供 Microsoft,但只用于更正本文所描述的问题。它仅应用于正经历此特定问题的系统。
若要解决此问题,请与 Microsoft 产品支持服务以获取此修复程序。Microsoft 产品支持服务的电话号码和有关支持费用的信息的完整列表,请访问下面的 Microsoft Web 站点:
http://support.microsoft.com/contactus/?ws=support注意: 在特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新能够解决您的问题,可能取消的通常情况下收取的电话支持服务费用。照常收取支持费用将应用于其他支持问题和对于特定更新无法解决的问题。
此修复程序的英语版应具有以下文件属性或更高版本:
Date Time Version Size File name Platform
-------------------------------------------------------------
6/22/1999 1:34 PM 1.00.0294 481,552 MQQM.DLL x86
状态
Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。
在 Windows NT 4.0 服务包 6,此错误已得到纠正。
详细信息
TCP/IP Nagle 算法
TCP/IP Nagle 算法旨在避免小数据包,称为 tinygrams,在慢速网络上的问题。该算法说一个 TCP/IP 连接可以有未经确认的只有一个未完成的小部分。"小"的定义各不相同,但通常被定义为"段大小小于",这样在以太网上约 1500 个字节。
手动禁用 Nagle 算法
您可以通过修改下面的注册表设置,使用"激活修改"部分中的说明禁用 Nagle 算法。
-
下置此变量的子树中,找到以下项:
\Software\Microsoft\MSMQ\Parameters -
从编辑菜单中选择添加键,请使用以下信息:
Value Name: TcpNoDelay
DWord: 1
激活所做的修改
必须停止并重新启动后进行注册表更改队列管理器。这可以通过停止和启动 Microsoft 消息队列服务,从服务控制面板。
参考资料
注意:Nagle 算法中 TCP/IP RFC 896 定义。