从MSMQ读取数据并将其标记为已读

从MSMQ读取数据并将其标记为已读,msmq,Msmq,我们正在使用MSMQ存储一个对象。 客户端应用程序(即asp.net UI)从队列中读取数据。 我们有两个案例,我认为.Net MessageQueue不直接支持 案例1:从队列中读取对象时。我们需要对该对象进行一些处理。 如果处理失败(如果用户关闭浏览器,则会发生这种情况),那么我们将丢失该对象,因为它已从队列中读取,并且我们尚未完成处理。MSMQ中是否有方法指定在某个事件上将对象放回队列中 案例2:当对象从队列中读取时,我们如何将对象标记为已读,而不将其从队列中删除 我尝试了Message.

我们正在使用MSMQ存储一个对象。 客户端应用程序(即asp.net UI)从队列中读取数据。 我们有两个案例,我认为.Net MessageQueue不直接支持

案例1:从队列中读取对象时。我们需要对该对象进行一些处理。 如果处理失败(如果用户关闭浏览器,则会发生这种情况),那么我们将丢失该对象,因为它已从队列中读取,并且我们尚未完成处理。MSMQ中是否有方法指定在某个事件上将对象放回队列中

案例2:当对象从队列中读取时,我们如何将对象标记为已读,而不将其从队列中删除


我尝试了Message.BeginPeek,但它无法解决问题。

您可能希望在这种情况下使用事务性队列。当您在事务中收到消息时,该消息将保留在队列中,但其他任何人都无法使用。如果成功处理消息,则可以提交事务,从而将其从队列中删除。如果处理失败,那么您只需中止事务,消息将再次可供下一个接收者处理

您需要使用Receive方法从事务队列接收消息