超过了 MSMQ 队列的存储配额。无法在该队列中存储更多的消息。
已达到消息队列的队列配额。
减少未完成的消息计数
要解决此问题,请执行以下操作:
处理队列中的现有消息,以将未完成的消息计数减少为队列配额阈值以下。请确认消息的处理速率高于排队速率。这可能需要使用其他硬件或对解决方案体系结构进行更改。
也可以增加特定的队列配额。有关消息队列的队列配额的详细信息,请参阅 Microsoft 知识库中的文章 899612 ( http://go.microsoft.com/fwlink/?LinkID=107359)。
为避免将来发生此问题,发送应用程序应通过接收消息的计算机请求否定确认 (NACK)。如果 NACK 返回到发送应用程序且显示已达到目标队列或计算机的配额,则发送应用程序可以停止发送消息或将消息转移到其他目标。发件人以编程方式请求 Nack 和 Ack。有关详细信息,请参阅利用 MSMQ 和 .NET 进行可靠消息传递 ( http://go.microsoft.com/fwlink/?LinkID=95381)。
可以使用 perfmon 命令行工具监视与消息队列中传入和传出消息相关的多个数据点。
要执行此过程,必须拥有“管理员”成员身份,或者已向你委派了适当的权限。
要使用 perfmon 监视数据,请执行以下操作:
打开命令提示符。要打开命令提示符,请单击“开始”。在搜索框中,键入“cmd”,然后按 Enter。
在命令提示符处,键入 Perfmon,然后按 ENTER。
在控制台树中的“监视工具”下,单击“性能监视器”。
在详细信息窗格中,单击绿色加号 (+) 可添加监视器。
在“添加计数器”选项卡的“计数器”下,单击 “MSMQ Service”旁边的加号 (+)。
选择所需的相应计数器。
单击“添加”,然后单击“确定”。
有关详细信息,请参阅事件 ID 2182 ( http://technet.microsoft.com/zh-cn/library/dd337533(WS.10).aspx)
Target | Microsoft.MSMQ.10.0.Servers | ||
Category | AvailabilityHealth | ||
Enabled | False | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.Windows.EventProvider | Default |
Alert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.MSMQ.10.0.Rule.Alert.Event2182" Enabled="false" Target="Microsoft.MSMQ.10.0.Servers" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>AvailabilityHealth</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">2182</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">EventSourceName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">$Target/Property[Type="Microsoft.MSMQ.10.0.ServerRole"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="Alert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertName/>
<AlertDescription/>
<AlertOwner/>
<AlertMessageId>$MPElement[Name="Microsoft.MSMQ.10.0.Rule.Alert.Event2182.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
<Custom1/>
<Custom2/>
<Custom3/>
<Custom4/>
<Custom5/>
<Custom6/>
<Custom7/>
<Custom8/>
<Custom9/>
<Custom10/>
</WriteAction>
</WriteActions>
</Rule>