由于消息存储问题导致消息队列服务无法启动。

Microsoft.MSMQ.10.0.Rule.Alert.Event2023 (Rule)

Knowledge Base article:

摘要

由于消息存储问题导致消息队列服务无法启动。

配置

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

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

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

 

说明

-bfolderpath

将文件备份到指定文件夹

-rfolderpath

从指定文件夹还原文件

-y

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

-cmsmq_resource_name

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

-?

显示实用程序的帮助

原因

消息存储将导致 Message Queuing 服务问题。

解决方法

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

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

其他注意事项

Mqbkup 实用工具无法用于备份或还原 Active Directory 域服务中存储的对象。因此,Mqbkup 实用程序无法备份或还原公用队列,因为公用队列是 Active Directory 域服务中的对象。Mqbkup 实用工具会备份或还原所有在本地计算机上存储的、由公用队列引用的消息队列消息,但公用队列本身必须独立于 Mqbkup 实用工具进行备份或还原。

此实用工具会备份可恢复的事务性消息,包括传出队列中的消息。其不会备份或还原快速消息。

证书和加密密钥信息不使用此实用工具进行备份。

执行还原操作后,必须注册新的用户证书。有关如何注册证书的信息,请参阅“其他引用”。

此实用工具会停止并重启消息队列服务,这将导致所有快速消息丢失。有关快速消息的详细信息,请参阅“其他引用”。

如果 COM+ 应用程序已由绑定到触发器的规则调用,则还原消息可能会失败,出现“访问被拒绝”错误。要解决此问题,请遵循以下步骤:

在 Windows Vista® 计算机上,从使用本地管理员权限运行的命令提示符处启动 mqbkup。

确保所有正在使用 MSMQ API 的用户应用程序和服务都已停止。

如果还原消息仍然失败,请等待 10 分钟,然后重试。释放所有对象后,COM+ 应用程序需要 10 分钟时间从内存中卸载。

其他

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

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

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

Element properties:

TargetMicrosoft.MSMQ.10.0.Servers
CategoryAvailabilityHealth
EnabledFalse
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.10.0.Rule.Alert.Event2023" 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>EventSourceName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="Microsoft.MSMQ.10.0.ServerRole"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>2023</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.10.0.Rule.Alert.Event2023.AlertName"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>