MSMQ 控制台显示消息计数,但没有私有队列的消息

Posted

技术标签:

【中文标题】MSMQ 控制台显示消息计数,但没有私有队列的消息【英文标题】:MSMQ console showing message count but no messages for private queue 【发布时间】:2013-06-07 15:41:33 【问题描述】:

我在 Windows Server 2008 R2 服务器上有一个事务性私人消息队列(在其他消息队列中我没有看到此问题)。

此特定队列每隔几周就会出现一个反复出现的问题,控制台显示队列中的消息计数非零,但队列本身或任何子队列中没有任何消息。队列资源管理器显示相同的内容。性能计数器指示内置 msmq 控制台和队列资源管理器中存在计数等消息。

我找不到任何消息。我知道对于带有死信跟踪的传出队列,我可能会看到这样的情况,这样它可能已被传递到远程计算机但尚未处理。不过,这不是一个传出队列。消息来自远程机器并已到达此机器。

另外,我确定我看到的计数不是日志消息或子队列。

这有意义吗?对此有合乎逻辑的解释吗?在某些情况下,这是可以预期的吗?如果有,是什么?

编辑:删除了有关清除队列删除计数的信息 - 这是不正确的。清除实际上什么都不做,让我处于与以前相同的状态,并反映了计数,但没有显示任何消息。

【问题讨论】:

【参考方案1】:

如您所述,如果源日志正在使用中,您可以看到传出队列上的消息计数。如果需要将它们移动到 DLQ,则存在不可见的消息。

我希望您的问题与此类似 - 传出队列中应该有一条可见的消息,而目标队列中应该有一条不可见的消息,因为传递尚未完成。我假设在此过程中已经丢失了握手或存储确认。或者,消息可能已被处理并从队列中删除,但 MSMQ 无法更新事实的发送者。

检查发送到此队列的远程计算机上的传出队列。

【讨论】:

感谢约翰,这是很好的洞察力。调查它,看看我能确定什么。会回来报告的。 有多个客户端向此队列服务器发送消息。有没有一种简单的方法可以让我查看哪些人可能有/导致沟通问题来缩小我正在寻找的领域? 我在传出队列中看到非零计数,但在这些队列中也看不到任何消息。我的消息数和未确认数相同。 似乎有些消息正在通过并得到处理——它们来自一些发送机器。有问题的是来自发送机器子集的那些。我似乎找不到共同点。所有机器都在同一个域上(但使用私有队列,这样域不应该是公共队列的问题),每个人和匿名登录都有完全控制权。有什么想法可以弄清楚是什么原因造成的吗? 如果您确信 100% 的数据消息已被传递和处理,那么您将丢失确认消息。使用域、私有队列、匿名登录对此没有影响。解决这个问题需要监控网络上的数据包以查看它们丢失的位置。对多个发件人进行故障排除将是漫长而乏味的。

以上是关于MSMQ 控制台显示消息计数,但没有私有队列的消息的主要内容,如果未能解决你的问题,请参考以下文章

MSMQ - 此计算机上尚未安装消息队列

MSMQ 消息卡在传出队列中

MSMQ - 发送到远程专用队列啥都不做

进行事务处理时消息未到达 MSMQ

为啥将消息放入死信队列 (MSMQ)?

消息队列MSMQ的使用