C# 从不从MSMQ中删除是否可以?

C# 从不从MSMQ中删除是否可以?,c#,msmq,C#,Msmq,我继承了一个应用程序,该应用程序从MSMQ中提取消息并对其进行一些处理,然后根据消息中的内容向数据库添加一些数据。消息被我不控制的第三方应用程序推送到队列中 虽然我对如何使用这些API有基本的了解,但我对MSMQ了解不多 无论如何,我注意到这些消息从未被删除,我们的客户端肯定从未明确地删除它们,我可以查看计算机管理,查看服务器上次重新启动时的消息 这是错误的吗?当队列达到某个最大值时,消息会自动被删除,还是会永远堆积在那里,慢慢占用更多内存 我怀疑,虽然这不是最佳做法,但重新启动时会清除队列,只

我继承了一个应用程序,该应用程序从MSMQ中提取消息并对其进行一些处理,然后根据消息中的内容向数据库添加一些数据。消息被我不控制的第三方应用程序推送到队列中

虽然我对如何使用这些API有基本的了解,但我对MSMQ了解不多

无论如何,我注意到这些消息从未被删除,我们的客户端肯定从未明确地删除它们,我可以查看计算机管理,查看服务器上次重新启动时的消息


这是错误的吗?当队列达到某个最大值时,消息会自动被删除,还是会永远堆积在那里,慢慢占用更多内存

我怀疑,虽然这不是最佳做法,但重新启动时会清除队列,只要有足够的可用资源,您就永远不会遇到问题

这就是说,我会选择设置一些东西来定期清理队列,这样就不会让服务器崩溃。我对MSMQ不太熟悉,但是有什么方法可以告诉我消息是否已被处理?即使是运行的附加服务,也会检查队列中的消息并查看它们是否已出现在数据库中,如果已出现,则会将其删除?这样,您就不需要修改继承的代码库,因为它可以正常工作


一旦你决定了解决方案,请在这里发布更新-我很想知道你最终如何处理这个问题。谢谢

消息处理完毕后,通常会将其从队列中删除(以事务方式或其他方式)。

“无论如何,我注意到消息从未被删除,我们的客户端肯定从未明确删除它们,我可以查看计算机管理,查看服务器上次重新启动时的消息。”

如果上次重新启动之前没有任何消息,则听起来这些消息是快速的。Express消息只存储在RAM中,不会持久化到磁盘,因此重新启动MSMQ服务将销毁它们。这可能就是消息量从未达到临界水平的原因

由于MSMQ使用内核内存和磁盘空间进行内存存储,最终这两个内存中的一个会耗尽,并导致服务器稳定性问题,因此您的清理过程计划是一个不错的计划

干杯,
John Breakwell(MSFT)

这适用于任何消息传递系统(例如WebSphere*MQ),而不仅仅是MSMQ。这就是为什么我说的是“队列”,而不是“MSMQ队列;”正如您所建议的,我们已经决定使用额外的服务来清除旧邮件。此脚本将每天运行一次,并从队列中删除超过一周的任何内容。它可能会在将来被逐步淘汰,我们将让应用程序自行管理,但目前这是最简单、最快捷的解决方案。