由于内部专用队列问题导致消息队列服务无法启动。

Microsoft.MSMQ.6.3.Rule.Alert.Event2020 (Rule)

Knowledge Base article:

摘要

由于内部专用队列问题导致消息队列服务无法启动。

配置

使用命令行备份和还原消息队列消息

在命令提示符下,键入以下内容,然后按 ENTER:

mqbkup {-bfolderpath | -rfolderpath| -?}[-y] [-cmsmq_resource_name]

Â

说明

-bfolderpath

将文件备份到指定文件夹

-rfolderpath

从指定文件夹还原文件

-y

不提示(所有问题均为“是”)

-cmsmq_resource_name

在 MSMQ 配置为群集资源时使用,指定群集 MSMQ 资源名称

-?

显示实用程序的帮助

原因

此问题可能是由于 MSMQ\Storage\LQS 目录中的某个文件损坏所致。该目录包含计算机中所有专用队列的定义。

解决方案

在还原消息之前,您必须关闭“控制面板”以及所有消息队列应用程序或者打开 HKLM\Software\MSMQ\Parameters 注册表项的注册表项句柄的任何应用程序。此类应用程序通常包括计算机管理控制台(如果加载了消息消息队列单元)、MSMQ 触发器服务、消息队列服务以及一些第三方应用程序。

注意:关闭控制面板在 Windows XP 及更高版本上不是问题,因为这些版本的 Windows 不包括 MSMQ 控制面板扩展。

其他考虑事项

其他

有关详细信息,请参阅“备份和还原消息”( http://technet.microsoft.com/en-us/library/cc771016(WS.10).aspx)。

有关详细信息,请参阅“注册消息队列的证书”( http://technet.microsoft.com/en-us/library/cc753651(WS.10).aspx)。

有关详细信息,请参阅“消息传递方法”( http://technet.microsoft.com/en-us/library/cc771721(WS.10).aspx)。

Element properties:

TargetMicrosoft.MSMQ.6.3.Servers
CategoryAvailabilityHealth
EnabledFalse
Event_ID2020
Event Source$Target/Property[Type="Microsoft.MSMQ.6.3.ServerRole"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
由于内部专用队列问题导致消息队列服务无法启动。
{0}
Event LogApplication

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.MSMQ.6.3.Rule.Alert.Event2020" Enabled="false" Target="Microsoft.MSMQ.6.3.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>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="Microsoft.MSMQ.6.3.ServerRole"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>2020</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertOwner/>
<AlertMessageId>$MPElement[Name="Microsoft.MSMQ.6.3.Rule.Alert.Event2020.AlertName"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>