繁体   English   中英

非事务性队列上的 MSMQ 错误

[英]MSMQ error on non-transactional queue

具有从队列中查看消息的简单代码

message = myQueue.Peek(TimeOutForPeek);

另一方面,消息只是发送到队列:

sendQueue.Send(message);

如果 myQueue 是事务性的,那么一切正常。 但如果没有,在运行一段时间后,我得到异常(见下文)并停止处理。

System.Messaging.MessageQueueException (0x80004005):操作在完成之前被取消。 在 System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 action, CursorHandle cursor, MessagePropertyFilter filter, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType) 在 System.Messaging.MessageQueue.Peek(TimeSpan timeout)

什么可能导致这种差异以及如何处理此类故障? 我对 MSMQ 不是很熟悉,任何帮助将不胜感激。

我不能完全把手指放在它上面,但至少错误消息显然表明有一个长时间运行的进程没有在一定时间内完成。

正如您在上面的评论中所述,在短时间内收到了 3000-5000 条消息,我想接收系统在发生错误时仍在忙于处理它们,并且没有足够快地返回以读取下一条消息。超时发生。

可能您已达到系统的资源限制?

你的描述很合适......就像,机器正在接收如此多的消息,但在下一个消息到达之前无法足够快地处理它们。

如果它适用于事务队列,我怀疑 MSMQ 资源处理在两种情况下都不同。

查看 John Breakwell 非常详细的博客文章资源不足? 逃跑,逃跑! 并检查是否有您认为有用的东西。 里面有很多东西。

其他想法:

如果您的接收端是单线程的,如果您还没有这样做(如果适用于您的场景),请考虑并行处理消息。 这可能有助于在新消息到达之前更快地将消息从队列中取出。

暂无
暂无

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

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