MSMQ - 我可以查询当前正在处理的邮件吗?

时间:2014-07-11 16:05:40

标签: c# wcf msmq netmsmqbinding msmq-wcf

我正在使用带有MSMQ端点的WCF,并且看到this question中描述的行为 - 基本上虽然服务被限制为一次处理一条消息,但是从队列中获取了2条消息,其中一条看似被保留在记忆中,而另一个正在被处理。

这对监测正在发生的事情提出了一个问题;我有一个监控页面,显示哪些作业在队列中以及哪些作业正在处理中,但由于这种行为,有一段时间,当作业从队列中取出但尚未开始处理时,作业会有效消失。我正在使用MessageQueue.GetAllMessages()来获取当前队列中的消息列表。

我对MSMQ并不熟悉,但我认为当消息出列时,它被标记为不可见,以便其他进程不会将其取消。有没有办法查询这些消息,以便我可以看到它们是什么?

2 个答案:

答案 0 :(得分:1)

我可以看到这会让人烦恼,特别是在消息量低的情况下,以及一个消息处理程序,它会在返回获取下一条消息之前启动一个长时间运行的进程。

从语义上讲,当消息从队列中消失时,实际上正在处理,只是处理有时会涉及无限期地缓存消息。

只要您使用事务性队列,如果服务因某种原因消失,则不会删除隐藏的消息。

感谢您不直接回答您的问题。

答案 1 :(得分:1)

如果 真的 想要这样做,请尝试使用光标 Peek 。听起来像监控页面有点过分。

MessageQueue.Peek on MSDN

您可以对其进行设置,以便获得整个消息等,而不确定性能影响。我之前做过类似的事情......