繁体   English   中英

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

[英]MSMQ - can I query messages which are currently being processed?

我正在将WCF与MSMQ端点一起使用,并看到此问题中描述的行为-基本上,尽管该服务被限制为一次处理一条消息,但从队列中取出了2条消息,其中一条似乎保留在内存中,而另一条则保留正在处理。

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

我对MSMQ不太熟悉,但是我假设消息出队时将其标记为不可见,以便其他进程不会将其删除。 有没有一种方法可以查询这些消息,以便查看它们是什么?

我可以看到这特别令人讨厌,特别是对于低消息量和消息处理程序,该消息处理程序在返回获取下一条消息之前启动了长时间运行的过程。

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

只要您使用事务性队列,如果由于某种原因该服务消失了,隐藏的消息就不会被丢弃。

意识到这并不能直接回答您的问题。

如果您真的想这样做,请尝试使用光标 Peek 虽然听起来像是监视页面的杀手kill。

MSDN上的MessageQueue.Peek

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM